2009-11-02 6 views

Antwort

81

Das Ende:

m.rbegin(); 

Maps (und Mengen) werden sortiert, so dass das erste Element ist die kleinste, und das letzte Element die größte ist. Standardmäßig verwenden Karten std::less, aber Sie können den Vergleicher wechseln, und dies würde natürlich die Position des größten Elements ändern. (Zum Beispiel: std::greater Verwendung wäre es bei begin() platzieren.

Beachten Sie rbegin einen Iterator zurück. Um den eigentlichen Schlüssel zu erhalten, verwenden m.rbegin()->first. Sie könnte es einpacken in eine Funktion für Klarheit, obwohl ich "m ob es sich lohnt es sich nicht sicher:

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 für auf elegante Weise das letzte Element der Rückkehr! – AraK

+0

Dies ergibt einen Iterator für das letzte Element, nicht jedoch für den Schlüssel. Vielleicht solltest du das so optimieren, dass es 'm.rbegin() -> first' liest, damit du den Schlüssel bekommst. –

+3

könnte es auch wert sein, nach leeren Karten zu suchen. – user2672165

11

die Einträge in einem std :: map sortiert, so dass für eine std :: map m (unter der Annahme m.empty() falsch ist), können Sie die größte Schlüssel leicht zu bekommen: (--m.end())->first

0

A s std :: map ist ein assoziatives Array, man kann leicht den größten oder kleinsten Schlüssel finden. Per defualt vergleichen Funktion ist weniger (<) Operator so größten Schlüssel wird das letzte Element in der Karte sein. Wenn jemand eine andere Anforderung hat, kann jeder die Vergleichsfunktion ändern, während er die Karte deklariert.

std :: map < Schlüssel, Wert, vergleichen < Schlüssel, Wert>>

standardmäßig vergleichen = std :: weniger

Verwandte Themen