Кажется, что я могу отсортировать a std::vector<std::pair<int, std::string>>
, и это отсортирует на основе международного значения. Действительно ли это - четко определенная вещь сделать?
Делает std::pair
имеет упорядочивание значения по умолчанию на основе его элементов?
std :: pair
использует лексикографическое сравнение: оно будет сравниваться на основе первого элемента. Если значения первых элементов равны, тогда сравнение будет основано на втором элементе.
Определение в стандарте C ++ 03 (раздел 20.2.2):
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).
Я использую их ежедневно, и все ссылки относятся к WordPress. Счастливого кодинга!
Оператор сравнения. Он использует лексикографическое сравнение: возвращаемое значение равно true, если первый элемент x меньше первого элемента y, и false, если первый элемент y меньше первого элемента x. Если нет ни того, ни другого, то operator< возвращает результат сравнения вторых элементов x и y. Этот оператор можно использовать, только если T1 и T2 - LessThanComparable. Это глобальная функция, а не функция-член.
Похоже, что на самом деле это комбинация обоих элементов.
Согласно моей копии стандарт C ++ 0x, раздел 20.3.3.26, std :: pair
имеет operator <
, определенный таким образом, что для двух пар x и y он возвращает
x.first < y.first || (!(y.first < x.first) && x.second < y.second)
Я не уверен, является ли это частью стандарта 2003 года. Я также должен отметить, что это не будет компилироваться, если сами элементы не являются LessThanComparable.
Да. operator <()
определен для std :: pair
, предполагая, что оба T1
и T2
сами по себе сопоставимы .