首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++如何在std::map中找到最大的键?

C++如何在std::map中找到最大的键?
EN

Stack Overflow用户
提问于 2009-11-02 17:21:38
回答 5查看 44.5K关注 0票数 51

目前,我的解决方案是遍历map来解决这个问题。

我看到有一个upper_bound方法可以让这个循环更快,但是有没有更快或者更简洁的方法呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-02 17:26:08

结尾:

代码语言:javascript
运行
复制
m.rbegin();

Maps (和集合)是排序的,所以第一个元素最小,最后一个元素最大。默认情况下,地图使用std::less,但您可以切换比较器,这当然会更改最大元素的位置。(例如,使用std::greater会将其放在begin()

请记住,rbegin返回一个迭代器。要获取实际的密钥,请使用m.rbegin()->first。为了清楚起见,你可以把它封装成一个函数,尽管我不确定这样做是否值得:

代码语言:javascript
运行
复制
template <typename T>
inline const typename T::key_type& last_key(const T& pMap)
{
    return pMap.rbegin()->first;
}

typedef std::map</* types */> map_type;

map_type myMap;
// populate

map_type::key_type k = last_key(myMap);
票数 123
EN

Stack Overflow用户

发布于 2009-11-02 17:26:57

由于std::map中的条目是经过排序的,因此对于std::map m(假设m.empty()为false),您可以轻松地获得最大的键:(--m.end())->first

票数 12
EN

Stack Overflow用户

发布于 2009-11-07 16:24:57

由于std::map是关联数组,所以很容易找到最大或最小的键。默认情况下,比较函数是小于(<)运算符,因此最大的键将是map中的最后一个元素。同样,如果有人有不同的需求,任何人都可以在声明map时修改比较函数。

std::map<键,值,compare<键,值>>

默认情况下为compare=std::less

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1660195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档