我有一个程序,我有两个std::map
迭代器分别说left
和right
。我想找到[left,right].
我天真地做了这样的事:int len = right - left
。我认为它会很好,但gave me an error
然后我发现distance(left, right)
方法感谢Stack Overflow上的帖子,但不幸的是它有线性时间复杂度。
是否可以为此获得O(1)
解决方案?
答案 0 :(得分:5)
是否有可能为此获得O(1)解决方案?
没有。 std::map
有一个BidirectionalIterator。 BidirectionalIterator 不支持随机访问,只能递增或递减。这意味着如果你想向前移动5个位置,你必须拨打++iterator_name
5次。如果您需要随机访问,则需要选择支持该容器的容器,例如std::array
或std::vector
。
答案 1 :(得分:0)
您可以使用特定于编译器的policy based data structure
。可以找到更多详细信息on this codeforces post。同样可以用于设置。