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

新手上路,请多包涵

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

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

原文由 gak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

结束:

 m.rbegin();

地图(和集合)是排序的,所以第一个元素是最小的,最后一个元素是最大的。默认情况下,地图使用 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);

原文由 GManNickG 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于您没有使用 unordered_map,因此您的键应该是有序的。根据您要对迭代器执行的操作,您有两种选择:

  1. 如果你想要一个转发迭代器,那么你可以使用 std::prev(myMap.end()) 。请注意, --myMap.end() 不能保证在所有情况下都有效,所以我通常会避免它。
  2. 如果要反向迭代,请使用 myMap.rbegin()

原文由 G Huxley 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题