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的操作呢?到目前为止我发现的所有引用都建议你必须手动完成(即定义一个迭代器,收敛于密钥 - 最好使用二进制搜索,然后找到下一个下键).有没有广泛可用的库函数可以做到这一点?
在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