końcu:
m.rbegin();
Maps (i zestawy) są posortowane tak, pierwszy element jest najmniejsza, a ten ostatni element jest największa. Domyślnie mapy używają std::less
, ale możesz zmienić porównywarkę i to oczywiście zmieni pozycję największego elementu. (Na przykład, używając std::greater
byłoby umieścić go w begin()
.
Pamiętaj rbegin
zwraca iterator. Aby uzyskać rzeczywisty klucz, użyj m.rbegin()->first
. Ty może owinąć go do funkcji dla jasności, chociaż I "m nie wiem, czy to się opłaca:
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);
+1 dla powracających ostatni element w elegancki sposób! – AraK
Powoduje to utworzenie iteratora do ostatniego elementu, ale nie do klucza. Może powinieneś zmienić to tak, aby brzmiał "m.rbegin() -> pierwszy", aby uzyskać klucz. –
również może warto sprawdzić pustą mapę. – user2672165