是否有广泛可用的Java的NavigableMap接口的C++版本?

Jef*_*ans 3 c++ java sorting stl map

在Java中,您可以使用NavigableMap,它允许您执行诸如"查找小于或等于给定值的最大键"(floorKey方法)等有用的内容.因此,如果myMap包含{1 - >"One",2 - >"Two",3 - >"Three",7 - >"Seven"},您可以调用myMap.floorKey(6)并返回键3.

在C++中,STL提供了一个map类,默认情况下会根据升序键值顺序对条目进行排序.这很好,但是如何在C++中执行类似于floorKey的操作呢?到目前为止我发现的所有引用都建议你必须手动完成(即定义一个迭代器,收敛于密钥 - 最好使用二进制搜索,然后找到下一个下键).有没有广泛可用的库函数可以做到这一点?

Cub*_*bbi 6

在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';
}
Run Code Online (Sandbox Code Playgroud)

但要注意角落的情况(如果upper_bound返回begin(),或者地图是空的,等等)

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