Сортировать вектор пар по первому элементу, а затем по второму элементу пары в C++?

Если у меня есть vector<pair<int,int> > тип данных, каков допустимый способ сортировки по первому элементу пары, а затем по второму, если первые равны? Например, может быть (1,10), (3,3), (7,13), (7,16), (8,1), (8,2), (15,2) и т. Д.

2 ответа

Решение

pairПо умолчанию сравнивают по первому элементу, затем по второму. Итак, если вы не заботитесь о сохранении порядка, когда первые элементы сравниваются, то вы можете просто использовать std::sort:

std::sort(v.begin(), v.end());

std::pair Операторы сравнения s сравнивают пары лексикографически, сначала сравниваются первые элементы, затем вторые элементы, если первые элементы равны.

Вот пример использования std::vector<std::pair<int, int>> а также std::sort,

С помощью std::sort этот способ использует std::pair "s operator <, который, как сказано выше, сравнивает пары лексикографически.

ОБНОВЛЕНИЕ: Вот пример использования std::stable_sort и пользовательская функция сравнения, которая сравнивает только первый элемент.

Используя std::stable_sort, вы гарантированно сохраняете относительный порядок одинаковых элементов. То есть, даже если первые элементы std::pairs равны, первоначальный относительный порядок все еще сохраняется.

Другие вопросы по тегам