减去地图迭代器

问题描述 投票:2回答:1

我有一个程序,我有两个std::map迭代器分别说leftright。我想找到[left,right].范围内的元素数量

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

然后我发现distance(left, right)方法感谢Stack Overflow上的一篇文章,但遗憾的是它具有线性时间复杂度。

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

c++ algorithm dictionary
1个回答
5
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.