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

时间:2011-03-23 18:52:53

标签: java c++ sorting stl map

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

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

2 个答案:

答案 0 :(得分: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';
}

但请注意极端情况(如果upper_bound返回begin(),或地图为空,等等)

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

答案 1 :(得分:0)

使用优先级队列。你必须使用地图吗?