我有map<double, unique_ptr<Item>>
。我想搜索这个地图,找到计算值最接近搜索值的项目。计算值可以由Item::compute
生成,这是一个长度计算,我希望避免对所有元素进行。可以假设此映射已根据计算函数的结果进行排序。
所以我认为我可以进行二分搜索,但问题是,我无法真正跳转到地图中的第n个元素,因为它是地图而不是矢量。更具体地说,我需要在地图中的两个任意项之间获取中间项。那可能吗?有没有办法在地图中执行二进制搜索?
答案 0 :(得分:4)
使用lower_bound()
或upper_bound()
std::map
方法。有关这两种方法的详细信息,请参阅std::map
文档,这些方法可找到离搜索键最近的现有密钥(如果不存在)。您不需要自己编写二进制搜索代码,这些方法可以帮您完成。
虽然使用double
作为地图密钥is problematic, of course,但我认为在此用例中使用lower_bound()
或upper_bound()
可能会产生合理的结果。