Сортировать вектор пар по первому элементу, а затем по второму элементу пары в 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
равны, первоначальный относительный порядок все еще сохраняется.