2009-11-02 15 views

cevap

81

sonu:

m.rbegin(); 

Maps (ve setleri) sıralanır, bu yüzden ilk unsur küçüğüdür ve son öğe büyüğüdür. Varsayılan olarak haritalar std::less'u kullanır, ancak karşılaştırmayı değiştirebilir ve bu elbette en büyük öğenin konumunu değiştirir. (Örneğin, std::greater kullanılarak begin() adresine yerleştirin ederim.

bir yineleyici döndürür rbegin unutmayın. m.rbegin()->first kullanmak fiili anahtarı almak için. Sen netlik için bir fonksiyonu haline tamamlamayı olabilir, ben "m olsa buna değer değil emin eğer:

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 daha az! – AraK

+0

Bu, son öğeye yineleyici verir, ancak anahtara değil. Belki de bunu düzeltmelisiniz, böylece 'm.rbegin() -> ilk' okur, böylece anahtarı alırsınız. –

+3

ayrıca boş haritayı kontrol etmeye değer olabilir. – user2672165

11

bir std :: map girişleri bir std :: map m için çok kolayca büyük anahtarını alabilirsiniz (m.empty() yanlış olduğunu varsayarak), sıralanır: (--m.end())->first

0

A s std :: map, kolayca en büyük veya en küçük anahtarı kolayca bulabileceğiniz assosiative dizisidir. Defualt karşılaştır fonksiyonu ile daha az (<) operatörü en büyük anahtar haritadaki son eleman olacaktır. Benzer şekilde, birisinin farklı gereksinimleri varsa, herkes haritayı açıklarken karşılaştırma işlevini değiştirebilir.

std :: map < anahtar, Değer, Değer> Varsayılan olarak

= std :: karşılaştırmak>, < tuşu karşılaştırmak zarif bir şekilde son öğe döndürmek için

İlgili konular