C++ 对地图元素执行二进制搜索

C++ 对地图元素执行二进制搜索,c++,dictionary,binary-search,C++,Dictionary,Binary Search,我有一张地图。我想搜索此地图,以查找计算值与搜索值最接近的项目。计算值可以通过Item::compute生成,这是一种长度计算,我希望避免对所有元素进行这种计算。可以假设此映射已根据计算函数的结果排序 所以我想我可以进行二元搜索,但问题是,我不能真正跳到地图中的第n个元素,因为它是地图而不是向量。更具体地说,我需要得到地图中两个任意项目之间的中间项目。可能吗?有没有一种有效的方法可以在映射中执行二进制搜索?使用下限()或上限()std::map方法。请参阅std::map文档了解这两种方法,如果

我有一张
地图
。我想搜索此地图,以查找计算值与搜索值最接近的项目。计算值可以通过
Item::compute
生成,这是一种长度计算,我希望避免对所有元素进行这种计算。可以假设此映射已根据计算函数的结果排序


所以我想我可以进行二元搜索,但问题是,我不能真正跳到地图中的第n个元素,因为它是地图而不是向量。更具体地说,我需要得到地图中两个任意项目之间的中间项目。可能吗?有没有一种有效的方法可以在映射中执行二进制搜索?

使用
下限()
上限()
std::map
方法。请参阅
std::map
文档了解这两种方法,如果搜索键不存在,则可以查找最靠近搜索键的现有键。您不需要自己编写二进制搜索代码,这些方法可以为您完成


虽然使用
double
作为映射键,但我想在这种情况下,使用
lower\u bound()
upper\u bound()
可能会产生合理的结果。

如果数据结构不支持对任何元素的随机访问,那么我们就不能对其执行二进制搜索。谢谢!但据我所知,lower_bound()和upper_bound()函数根据它们的键比较条目,但我需要根据它们的值进行比较。有办法吗?没有,还不清楚。映射的全部目的是通过键查找值。如果要搜索值,请交换映射,使其成为
映射
,将
ptr\u比较器
定义并实现为
唯一ptr
的严格弱排序,然后对该映射使用
下限()
上限()