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

gak*_*gak 40 c++ stl map

目前我的解决方案是迭代地图来解决这个问题.

我看到有一种upper_bound方法可以使这个循环更快,但有更快或更简洁的方法吗?

GMa*_*ckG 105

结束:

m.rbegin();
Run Code Online (Sandbox Code Playgroud)

映射(和集合)是排序的,因此第一个元素是最小的,最后一个元素是最大的.默认情况下map使用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);
Run Code Online (Sandbox Code Playgroud)

  • +1以优雅的方式返回最后一个元素! (9认同)
  • 也值得检查空地图. (4认同)

use*_*783 12

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

  • end() 不能在没有断言的情况下向后迭代 (2认同)