c++ - 对 map 元素执行二分搜索

标签 c++ dictionary binary-search

我有一个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/

相关文章:

Javascript 模拟器

python - 计算行日期之前 x 天的出现次数

java - 将两个列表分别转换为新映射的键和值

algorithm - 如何在 O(n) 时间内对单链表进行二分查找?

C++ 二进制搜索一个类

java - 使用二分查找查找数字的最大索引出现次数

c++ - 复杂类型数组的静态初始化

c++ - 如何在 C++ ATL/MFC 中检索具有与 DateTime.Ticks 相同格式的刻度

c++ - 使用 Boost,如何将自定义边缘属性作为结构放置/获取?

javascript - 简单的 Javascript map API