2009-11-02 29 views

回答

81

结束:

m.rbegin(); 

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

记住rbegin返回迭代器。要获得实际的键,使用m.rbegin()->first。您可能包起来变成了清晰的功能,但我的“M如果不相信这是值得的:

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); 
+7

+1在一个优雅的方式的最后一个元素返回! – AraK 2009-11-02 09:32:51

+0

这会产生最后一个元素的迭代器,但不会生成密钥。也许你应该调整它,以便它读取'm.rbegin() - >第一'',这样你就可以得到密钥。 – 2009-11-02 14:37:28

+3

也可能值得检查空地图。 – user2672165 2014-11-05 07:35:18

11

在一个std ::地图条目的排序,所以对于一个std ::地图米(假设m.empty()是假的),你可以轻松地获得最大的关键:(--m.end())->first

0

A s std :: map是一个可以很容易地找到最大或最小键的联合数组。由于比较功能较少(<),所以最大的关键字将是地图中的最后一个元素。同样,如果有人有不同的要求,任何人都可以在声明map时修改比较函数。

的std ::地图<键,值,比较<键,值>>

默认情况下比较=标准::少