2010-05-12 13 views

Odpowiedz

44

std::pair używa porównania leksykograficznego: Będzie porównywać na podstawie pierwszego elementu. Jeśli wartości pierwszych elementów są równe, wówczas będzie porównywać się na podstawie drugiego elementu.

Definicja w standardzie C++, 03 (sekcja 20.2.2) wynosi:

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

Operator porównania. Używa porównania leksykograficznego: wartość zwracana jest prawdą, jeśli pierwszy element x jest mniejszy niż pierwszy element y, i fałsz, jeśli pierwszy element y jest mniejszy niż pierwszy element x. Jeśli żadna z nich nie ma miejsca, operator < zwraca wynik porównania drugich elementów xiy. Ten operator może być używany tylko wtedy, gdy zarówno T1, jak i T2 są LessThanComparable. Jest to funkcja globalna, a nie funkcja składowa.

Wygląda na to, że jest to połączenie obu tych elementów.

6

Według mojej kopii standardu C++ 0x, sekcji 20.3.3.26, std::pair ma operator< zdefiniowane tak, że dla dwóch par x i y, zwraca

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

Nie jestem pewien, czy to także część standardu z 2003 roku. Powinienem również zauważyć, że nie skompiluje się, jeśli same elementy nie są mniej porównywalne.

0

Tak. operator<() jest zdefiniowany dla std::pair<T1, T2>, przy założeniu, że zarówno T1, jak i T2 są porównywalne.

Powiązane problemy