2010-05-12 15 views

Respuesta

44

std::pair utiliza la comparación lexicográfica: se comparará en función del primer elemento. Si los valores de los primeros elementos son iguales, entonces se comparará en función del segundo elemento.

La definición en la norma C++ 03 (sección 20.2.2) es:

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

El operador de comparación. Utiliza la comparación lexicográfica: el valor de retorno es verdadero si el primer elemento de x es menor que el primer elemento de y, y falso si el primer elemento de y es menor que el primer elemento de x. Si ninguno de estos es el caso, el operador < devuelve el resultado de comparar los segundos elementos de xey. Este operador solo se puede usar si tanto T1 como T2 son LessThanComparable. Esta es una función global, no una función miembro.

Parece que en realidad es una combinación de ambos elementos.

6

Según mi copia del estándar C++ 0x, sección 20.3.3.26, std::pair tiene un operator< definido de tal manera que para dos pares x e y, devuelve

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

No estoy seguro de si esto es parte del estándar 2003 también. También debería tener en cuenta que esto no se compilará si los elementos en sí mismos no son LessThanComparable.

0

Sí. operator<() se define para std::pair<T1, T2>, suponiendo que ambos T1 y T2 son comparables.

Cuestiones relacionadas