在 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';
}
但要注意极端情况(如果
upper_bound
返回 begin()
,或者 map 为空等)试运行:https://ideone.com/TP3DL
关于java - 是否有广泛使用的 C++ 版本的 Java 的 NavigableMap 接口(interface)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5410141/