除了std::find(first, last)
以外,是否有std::map
的等效版本?即,是否存在std::map
的{{1}}方法的版本,该方法搜索find
中的元素,但仅将搜索限制在指定的map
范围内?理想情况下,解决方案的大小应为[first, last)
的对数。
从what I've seen开始,[first, last)
本身不支持此功能(它总是搜索整个地图)。
答案 0 :(得分:11)
您可以使用std::lower_bound
,std::upper_bound
或std::equal_range
,因为std::map
迭代器和映射中的数据满足了这些功能的要求,尽管您应该意识到由于线性迭代器的增量,它的效率将低于std::map::find()
。
来自std::lower_bound
documentation
进行的比较次数是第一个和最后一个之间的距离的对数(最多为对数) 2(倒数第一)+ O(1)比较)。但是,对于非LegacyRandomAccessIterators,迭代器增量的数量是线性的。
强调是我的。
答案 1 :(得分:0)
如果我正确理解了这个问题,std::map::lower_bound
正是您要寻找的-它会为您提供不少于键的元素。另一端也有upper_bound
。