【发布时间】:2026-02-03 03:10:02
【问题描述】:
我想在少于 O(N) 的时间内计算 std::multimap 的两个迭代器之间的条目数。有什么技巧或聪明的方法可以做到这一点吗?
由于std::multimap 有双向迭代器,我的理解是像std::distance 这样的东西可以在O(N) 时间内完成。
附加细节:multimap 的键是一个 N 元组。我试图在multimap 中查找其键的第一个元素为0 的条目数。它们键的第一个元素的选项是0 和1,multimap 使用严格的弱排序,其中第一个关键元素永远是最重要的。即,所有带 0 的元素都在带 1 的任何元素之前。
上下文:迭代器由equal_range 返回,它以对数时间运行。声明式地,我想测量范围的长度。
谢谢。
【问题讨论】:
-
有一个计数器是不可能的吗?
-
不是,但我不希望手动管理计数器,如果有另一种方法可以做到这一点,即 STL 内置或不需要单独的计数器。
-
map/set 不提供对可以做这种事情的树遍历位的访问,这总是让我感到厌烦。同样,
std::lower_bound(map_iter, map_iter, V)效率低下。
标签: c++ c++11 stl time-complexity multimap