目前,我的解决方案是遍历map来解决这个问题。
我看到有一个upper_bound
方法可以让这个循环更快,但是有没有更快或者更简洁的方法呢?
发布于 2009-11-02 17:26:08
结尾:
m.rbegin();
Maps (和集合)是排序的,所以第一个元素最小,最后一个元素最大。默认情况下,地图使用std::less
,但您可以切换比较器,这当然会更改最大元素的位置。(例如,使用std::greater
会将其放在begin()
。
请记住,rbegin
返回一个迭代器。要获取实际的密钥,请使用m.rbegin()->first
。为了清楚起见,你可以把它封装成一个函数,尽管我不确定这样做是否值得:
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);
发布于 2009-11-02 17:26:57
由于std::map中的条目是经过排序的,因此对于std::map m(假设m.empty()
为false),您可以轻松地获得最大的键:(--m.end())->first
发布于 2009-11-07 16:24:57
由于std::map是关联数组,所以很容易找到最大或最小的键。默认情况下,比较函数是小于(<)运算符,因此最大的键将是map中的最后一个元素。同样,如果有人有不同的需求,任何人都可以在声明map时修改比较函数。
std::map<键,值,compare<键,值>>
默认情况下为compare=std::less
https://stackoverflow.com/questions/1660195
复制相似问题