Является ли порядок std:: pair <int, std::string> упорядоченным?
Кажется, что я могу отсортировать std::vector<std::pair<int, std::string>>, и он будет сортироваться по значению int. Это хорошо определенная вещь?
Имеет ли std::pair порядок по умолчанию, основанный на его элементах?
Ответ 1
std::pair использует лексикографическое сравнение: он будет сравнивать на основе первого элемента. Если значения первых элементов равны, тогда он будет сравнивать на основе второго элемента.
Я не уверен, что это тоже часть стандарта 2003 года. Следует также отметить, что это не скомпилируется, если сами элементы не являются LessThanComparable.
Оператор сравнения. Он использует лексикографическое сравнение: возвращаемое значение истинно, если первый элемент x меньше первого элемента y и false, если первый элемент y меньше, чем первый элемент x. Если это не так, то оператор < возвращает результат сравнения вторых элементов x и y. Этот оператор может использоваться только в том случае, если оба T1 и T2 являются LessThanComparable. Это глобальная функция, а не функция-член.
Похоже, что это комбинация обоих элементов.
Ответ 4
Да. operator<() определяется для std::pair<T1, T2>, считая, что обе T1 и T2 сами по себе сопоставимы.