如何在std :: map中找到min / max,如std :: set?

时间:2016-12-01 00:12:24

标签: c++ c++11 set stdmap stdset

由于set和map都是有序容器,因此std :: map中的min和max可以在0(1)时间内找到,就像std :: set一样?

// for std::set
// std::set<int> s;
auto min = *s.begin();

auto max = *s.rbegin();

如何从std :: map中获取O(1)中的max和min?这里的其他问题似乎建议迭代遍历地图,但我们不能使用std :: map的有序rightlt来更快地获得结果吗?

1 个答案:

答案 0 :(得分:6)

首先从密钥的迭代器中取消引用,如下所示:

// for std::map<int,string> s
auto minKey = s.begin()->first;
auto maxKey = s.rbegin()->first;

这仅适用于键,而不适用于值,因为地图仅按其键排序。