Станд.:: пара <интервал, станд.:: строка> упорядочивание четко определенного?

Кажется, что я могу отсортировать a std::vector<std::pair<int, std::string>>, и это отсортирует на основе международного значения. Действительно ли это - четко определенная вещь сделать?

Делает std::pair имеет упорядочивание значения по умолчанию на основе его элементов?

35
задан melpomene 10 May 2019 в 23:19
поделиться

4 ответа

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).
54
ответ дан 27 November 2019 в 07:01
поделиться

Я использую их ежедневно, и все ссылки относятся к WordPress. Счастливого кодинга!

-... 121---4594249-

Документация от SGI

Оператор сравнения. Он использует лексикографическое сравнение: возвращаемое значение равно true, если первый элемент x меньше первого элемента y, и false, если первый элемент y меньше первого элемента x. Если нет ни того, ни другого, то operator< возвращает результат сравнения вторых элементов x и y. Этот оператор можно использовать, только если T1 и T2 - LessThanComparable. Это глобальная функция, а не функция-член.

Похоже, что на самом деле это комбинация обоих элементов.

2
ответ дан 27 November 2019 в 07:01
поделиться

Согласно моей копии стандарт 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.

9
ответ дан 27 November 2019 в 07:01
поделиться

Да. operator <() определен для std :: pair , предполагая, что оба T1 и T2 сами по себе сопоставимы .

2
ответ дан 27 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: