减去地图迭代器

时间:2017-04-28 12:58:35

标签: c++ algorithm dictionary

我有一个程序,我有两个std::map迭代器分别说leftright。我想找到[left,right].

范围内的元素数量

我天真地做了这样的事:int len = right - left。我认为它会很好,但gave me an error

然后我发现distance(left, right)方法感谢Stack Overflow上的帖子,但不幸的是它有线性时间复杂度。

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

2 个答案:

答案 0 :(得分:5)

  

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

没有。 std::map有一个BidirectionalIterator BidirectionalIterator 不支持随机访问,只能递增或递减。这意味着如果你想向前移动5个位置,你必须拨打++iterator_name 5次。如果您需要随机访问,则需要选择支持该容器的容器,例如std::arraystd::vector

答案 1 :(得分:0)

您可以使用特定于编译器的policy based data structure。可以找到更多详细信息on this codeforces post。同样可以用于设置。