Для класса std::pair
определен оператор
template<class T1, class T2>
constexpr bool operator< (const pair<T1, T2>&, const pair<T1, T2>&);
, который действует следующим образом
Возвращает: x.first
Так, например, для двух пар типа std::pair<std::pair<int, int>, std::pair<int, int>>
{ { 5, 19 }, { 8, 17 } }
^^^^^^^^^
и
{ { 5, 15 }, { 15, 5 } }
^^^^^^^^^
сначала пары { 5, 19 }
и { 5, 15 }
сравниваются с использованием одного и того же operator <
.
Поскольку вторая пара меньше первой пары, чем втораяпара будет предшествовать первой паре в векторе результатов.
Если они (первые пары) были равны друг другу, как, например,
{ { 5, 15 }, { 8, 17 } }
^^^^^^^^^
и
{ { 5, 15 }, { 15, 5 } }
^^^^^^^^^
, тогдавторые пары сравнивались.Поскольку пара { 8, 17 }
меньше { 15, 5 }
, то первая пара меньше второй пары.
Пары { 8, 17 }
и { 15, 5 }
сравниваются по одному и тому же шаблону operator <
.