2010-05-12 5 views

Répondre

44

std::pair utilise la comparaison lexicographique: Il sera basé sur le premier élément. Si les valeurs des premiers éléments sont égales, elles seront ensuite comparées en fonction du second élément.

La définition de la norme 03 C++ (section 20.2.2) est:

template <class T1, class T2> 
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y); 

Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second). 
1

Documentation from SGI

L'opérateur de comparaison. Il utilise la comparaison lexicographique: la valeur de retour est vraie si le premier élément de x est inférieur au premier élément de y, et faux si le premier élément de y est inférieur au premier élément de x. Si ce n'est pas le cas, l'opérateur < renvoie le résultat de la comparaison des deuxièmes éléments de x et y. Cet opérateur ne peut être utilisé que si T1 et T2 sont LessThanComparable. Ceci est une fonction globale, pas une fonction membre.

On dirait que c'est en fait une combinaison des deux éléments.

6

Selon ma copie de la norme C++ 0x, section 20.3.3.26, std::pair a un operator< défini tel que pour deux paires x et y, il retourne

x.first < y.first || (!(y.first < x.first) && x.second < y.second) 

Je ne suis pas certain si cela fait également partie de la norme de 2003. Je devrais également noter que ceci ne compilera pas si les éléments eux-mêmes ne sont pas LessThanComparable.

0

Oui. operator<() est défini pour std::pair<T1, T2>, en supposant que les deux T1 et T2 sont eux-mêmes comparables.

Questions connexes