2009-11-02 5 views

Répondre

81

L'extrémité:

m.rbegin(); 

Maps (et ensembles) sont classifiées, de sorte que le premier élément est le plus petit, et le dernier élément est le plus grand. Par défaut, les cartes utilisent std::less, mais vous pouvez changer le comparateur et cela changerait bien sûr la position de l'élément le plus grand. (Par exemple, en utilisant std::greater le placerait à begin(). Pour obtenir la clé réelle

Gardez à l'esprit rbegin retourne un itérateur., Utilisez m.rbegin()->first. Vous peut envelopper dans une fonction pour plus de clarté, bien que je "m ne sais pas si ça vaut le coup:

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 pour retourner le dernier élément d'une manière élégante! – AraK

+0

Ceci donne un itérateur au dernier élément, mais pas à la clé. Peut-être que vous devriez modifier cela pour qu'il se lise 'm.rbegin() -> first' afin que vous obteniez la clé. –

+3

aussi il pourrait être utile de vérifier la carte vide. – user2672165

11

les entrées dans un std :: carte sont triés, donc pour un std :: carte m (en supposant m.empty() est faux), vous pouvez obtenir la plus grande facilement clé: (--m.end())->first

0

A s std :: map est assosiative array on peut facilement trouver la plus grande ou la plus petite clé très facilement. Par defualt comparer la fonction est moins opérateur (<) donc la plus grande clé sera le dernier élément de la carte. De même, si quelqu'un a une exigence différente, n'importe qui peut modifier la fonction de comparaison lors de la déclaration de la carte.

std :: carte < clé, valeur, touche COMPARE <, Value>>

Par défaut = std :: comparer moins