我有一个map<double, unique_ptr<Item>>
。我想搜索此 map ,以找到计算值最接近搜索值的项目。计算值可以通过 Item::compute
生成这是一个长度计算,我希望避免对所有元素进行计算。可以假设该映射已经根据计算函数的结果进行了排序。
所以我认为我可以进行二分搜索,但问题是,我无法真正跳转到映射中的第 n 个元素,因为它是映射而不是 vector 。更具体地说,我需要获取 map 中两个任意项目之间的中间项目。那可能吗?有没有一种有效的方法可以在 map 中执行二分搜索?
最佳答案
使用 lower_bound()
或 upper_bound()
std::map
方法。请参阅 std::map
文档了解这两种方法,它们查找最接近搜索键的现有键(如果不存在)。您不需要自己编写二分搜索代码,这些方法会为您完成。
虽然使用double
作为 map 键is problematic, of course ,我猜想在这个用例中使用 lower_bound()
或 upper_bound()
可能会产生合理的结果。
关于c++ - 对 map 元素执行二分搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059623/