在地图元素

时间:2016-10-15 13:30:04

标签: c++ dictionary binary-search

我有map<double, unique_ptr<Item>>。我想搜索这个地图,找到计算值最接近搜索值的项目。计算值可以由Item::compute生成,这是一个长度计算,我希望避免对所有元素进行。可以假设此映射已根据计算函数的结果进行排序。

所以我认为我可以进行二分搜索,但问题是,我无法真正跳转到地图中的第n个元素,因为它是地图而不是矢量。更具体地说,我需要在地图中的两个任意项之间获取中间项。那可能吗?有没有办法在地图中执行二进制搜索?

1 个答案:

答案 0 :(得分:4)

使用lower_bound()upper_bound() std::map方法。有关这两种方法的详细信息,请参阅std::map文档,这些方法可找到离搜索键最近的现有密钥(如果不存在)。您不需要自己编写二进制搜索代码,这些方法可以帮您完成。

虽然使用double作为地图密钥is problematic, of course,但我认为在此用例中使用lower_bound()upper_bound()可能会产生合理的结果。