减去地图迭代器

Subtracting map iterators

本文关键字:迭代器 地图      更新时间:2023-10-16

我有一个程序,其中我有两个 std::map迭代器分别为 leftright。我想在 [left,right].

范围内找到元素数量

我天真地做了这样的事情: int len = right - left。我以为很好,但是它给了我一个错误

然后我发现了distance(left, right)方法,要感谢堆栈溢出的帖子,但不幸的是它具有线性时间的复杂性。

是否可以为此获得O(1)解决方案?

是否可以为此获得O(1(解决方案?

否。std::map具有 biDirectionaliterator 。A 双向学位术语不支持随机访问,只能增加或减少。这意味着,如果您想向前移动5个位置,则必须致电++iterator_name 5次。如果您需要随机访问,则需要选择一个支持std::arraystd::vector的容器。

您可以使用特定于编译器的policy based data structure。可以在此codeforces上找到更多详细信息。