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

是否有广泛可用的C++;Java版本';s NavigableMap接口?,java,c++,sorting,stl,map,Java,C++,Sorting,Stl,Map,在Java中,您可以使用一个,它允许您执行一些有用的操作,例如“查找小于或等于给定值的最大键”(floorKey方法)。因此,如果myMap包含{1->“一”、2->“二”、3->“三”、7->“七”},您可以调用myMap.floorKey(6),它将返回3的键 C++中,STL提供了一个类,默认情况下,它根据升序键值顺序对条目进行排序。这很好,但是我怎么能在C++中做类似于FrooKEY的事情呢?到目前为止,我找到的所有参考资料都建议您必须手动执行此操作(即,定义一个迭代器,在键上收敛-最

在Java中,您可以使用一个,它允许您执行一些有用的操作,例如“查找小于或等于给定值的最大键”(floorKey方法)。因此,如果
myMap
包含{1->“一”、2->“二”、3->“三”、7->“七”},您可以调用
myMap.floorKey(6)
,它将返回
3
的键


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

在C++中得到这个最简单的方法是调用<代码> map::uPulfLink ,并减去返回迭代器:

#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';
}
#包括
#包括
#包括
int main()
{
std::map myMap=
{{1,“一”},
{2,“两”},
{3,“三”},
{7,“七”};
自动i=myMap.上界(6);

std::cout first使用优先级队列。是否有理由必须使用映射?

下限
的工作方式与
floorKey
->“查找小于或等于给定值的最大键”的工作方式不同。调用
(-下限(7))->首先
仍然会产生
3
@Xeo:是的,我注意到就在你回答之前。啊,对不起。我在写那篇评论的时候仍然加载了你未编辑的答案。