目前我的解决方案是遍历地图来解决这个问题。 我看到有一个 upper_bound 方法可以使这个循环更快,但是有更快或更简洁的方法吗? 原文由 gak 发布,翻译遵循 CC BY-SA 4.0 许可协议
结束: 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,因此您的键应该是有序的。根据您要对迭代器执行的操作,您有两种选择: 如果你想要一个转发迭代器,那么你可以使用 std::prev(myMap.end()) 。请注意, --myMap.end() 不能保证在所有情况下都有效,所以我通常会避免它。 如果要反向迭代,请使用 myMap.rbegin() 原文由 G Huxley 发布,翻译遵循 CC BY-SA 4.0 许可协议
结束:
地图(和集合)是排序的,所以第一个元素是最小的,最后一个元素是最大的。默认情况下,地图使用
std::less
,但是您可以切换比较器,这当然会改变最大元素的位置。 (例如,使用std::greater
会将其放置在begin()
。请记住
rbegin
返回一个迭代器。要获取实际密钥,请使用m.rbegin()->first
。为了清楚起见,您 可以 将其包装成一个函数,尽管我不确定它是否值得: