如果我的容器介于两个现有值之间,那么捏造迭代器类别是否合理?

Is it reasonable to fudge the iterator category if my container falls between two of the existing values?

我有一个使用自平衡顺序统计树作为其底层存储的绳索容器(每个树节点包含一个变量,但通常绳索的元素相当多,例如,如果存储字符,则树节点很可能容纳 ~4000 个元素)。

分配绳索迭代器 std::random_access_iterator_tag iterator_category 是否合理,即使 +、+=、-、-= 等操作实际上是对数复杂度(根据与当前位置)?如果新位置位于当前树节点内(这应该比更大的跳跃更频繁)那么操作实际上是随机访问所需的 O(1),只有当需要沿着树步进时,真正的O(1) 的复杂性丢失了。但是在所有情况下,它都比 O(n) 好得多,因为使用双向意味着。

当然,我可以创建自己的类别标签,但我需要专门化各种独立的算法函数才能利用。

也许这是一个不太适合SO的意见问题,但我仍然很好奇人们对这个问题的看法。

假设您正在使用库中的容器。该库的文档声称容器的迭代器满足随机访问迭代器的要求。您的程序存在性能问题,您可以追溯到那些迭代器的增量运算符是 O(lg n) 而不是 O(1)。你觉得抱怨/提交错误报告是合理的吗?应该是吧。

您想编写别人会抱怨的代码吗?可能不会。您的里程数可能会有所不同,但通常低估性能总比夸大性能好。很少有人抱怨计算速度太快。