如何在std :: map中找到指定范围内的元素?

时间:2019-02-21 14:49:04

标签: c++ algorithm search stdmap

除了std::find(first, last)以外,是否有std::map的等效版本?即,是否存在std::map的{​​{1}}方法的版本,该方法搜索find中的元素,但仅将搜索限制在指定的map范围内?理想情况下,解决方案的大小应为[first, last)的对数。

what I've seen开始,[first, last)本身不支持此功能(它总是搜索整个地图)。

2 个答案:

答案 0 :(得分:11)

您可以使用std::lower_boundstd::upper_boundstd::equal_range,因为std::map迭代器和映射中的数据满足了这些功能的要求,尽管您应该意识到由于线性迭代器的增量,它的效率将低于std::map::find()

来自std::lower_bound documentation

  

进行的比较次数是第一个和最后一个之间的距离的对数(最多为对数)   2(倒数第一)+ O(1)比较)。但是,对于非LegacyRandomAccessIterators,迭代器增量的数量是线性的

强调是我的。

答案 1 :(得分:0)

如果我正确理解了这个问题,std::map::lower_bound正是您要寻找的-它会为您提供不少于键的元素。另一端也有upper_bound