2009-11-02 19 views

Odpowiedz

81

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); 
+7

+1 dla powracających ostatni element w elegancki sposób! – AraK

+0

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. –

+3

również może warto sprawdzić pustą mapę. – user2672165

11

wpisów w std :: map są sortowane, więc na std :: map m (zakładając m.empty() jest fałszywy), można łatwo uzyskać dostęp do największej klucz: (--m.end())->first

0

A s std :: map to tablica asocjatywna, którą z łatwością można łatwo znaleźć jako największy lub najmniejszy klucz. Przez funkcję defualt porównywania jest mniej (<), więc największy klucz będzie ostatnim elementem na mapie. Podobnie, jeśli ktoś ma inne wymagania, każdy może modyfikować funkcję porównywania podczas deklarowania mapy.

std :: map < klucz, wartość, porównaj < klucz, wartość>>

Domyślnie porównać = std :: mniej

Powiązane problemy