java - 是否有广泛使用的 Java NavigableMap 接口(interface)的 C++ 版本?

标签 java c++ sorting stl map

在 Java 中,你可以有一个 NavigableMap ,它可以让你做一些有用的事情,比如“找到小于或等于给定值的最大键”(floorKey 方法)。所以如果 myMap 包含 {1->"One", 2->"Two", 3->"Three", 7->"Seven"},你可以调用 myMap.floorKey (6) 返回3的key。

在 C++ 中,STL 提供了一个 map类,默认情况下根据键值的升序对条目进行排序。这很好,但是我怎样才能在 C++ 中做类似于 floorKey 的事情呢?到目前为止我发现的所有引用资料都建议您必须手动执行此操作(即定义一个迭代器,收敛于键 - 最好使用二进制搜索,然后找到下一个较低的键)。是否有广泛使用的库函数可用于执行此操作?

最佳答案

在 C++ 中获得它的最简单方法是调用 map::upper_bound 并递减返回的迭代器:

#include <map>
#include <string>
#include <iostream>
int main()
{
        std::map<int, std::string> myMap =
               {{ 1, "One"},
                {2, "Two"},
                {3, "Three"},
                {7, "Seven"}};

        auto i = myMap.upper_bound(6);
        std::cout << (--i)->first << '\n';
}

但要注意极端情况(如果 upper_bound 返回 begin(),或者 map 为空等)

试运行:https://ideone.com/TP3DL

关于java - 是否有广泛使用的 Java NavigableMap 接口(interface)的 C++ 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410141/

相关文章:

java - 任何人都可以清楚地解释为什么 Google Guice 有用吗?

c++ - 14 段显示和 Tesseract OCR with OpenCV

c++ - 容器特征 - is_multi、is_ordered、is_associative

perl - 我可以在Perl中将参数传递给sort的compare子例程吗?

javascript - 按子字符串对表格进行排序

JavaEE全局捕获运行时异常

java - 如何在模板类中实例化 T 类型

java - JSF/ICEfaces 动态层次结构树示例

c++ - 为什么需要引用 const 以避免复制参数

java - 按值对 HashMap 进行排序