Метод пользовательской сортировки для шаблона пары STL

C++Beginner
Практиковаться сейчас

Введение

В этом практическом занятии вы научитесь создавать метод пользовательской сортировки для шаблона пары и реализовывать его с использованием вектора в языке программирования C++. Предполагается, что у вас есть предварительные знания основных аспектов программирования на C++ и концепции шаблона пары. Если вы не знакомы с этими вопросами, рекомендуется ознакомиться с соответствующими туториалами перед продолжением.

Создайте пустой вектор и заполните его элементами

Начнем с объявления пустого вектора пар, а затем заполним его некоторыми элементами.
В этом шаге мы создадим пустой вектор.

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int main() {
  vector<pair<int, int>> v;

  return 0;
}

В этом блоке кода мы просто подключили необходимые заголовочные файлы и объявили пустой вектор пар.

Заполните вектор элементами

После создания пустого вектора мы можем добавить в него элементы. Мы будем добавлять элементы, используя метод push_back класса вектора. В этом случае мы добавляем пары целых чисел в вектор.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));

  return 0;
}

В этом блоке кода мы добавляем 5 пар в вектор v.

Создайте метод пользовательской сортировки

Для создания метода пользовательской сортировки необходимо сначала определить функцию сравнения. Функция сравнения сравнит две пары и вернет логическое значение, указывающее, меньше ли первая пара второй пары. В этом случае мы сравним первый элемент каждой пары, и если они равны, мы сравним вторые элементы пар.

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

В этом блоке кода мы создали функцию сравнения, которая принимает две пары целых чисел в качестве аргументов и возвращает логическое значение в соответствии с нашими заданными условиями. Функция сначала сравнивает первый элемент каждой пары. Если они не равны, функция возвращает результат сравнения. Если они равны, функция сравнивает второй элемент пары и возвращает результат сравнения.

Используйте sort для сортировки вектора

В этом шаге мы отсортируем элементы в векторе на основе метода пользовательской сортировки, который мы создали на предыдущем шаге. Чтобы отсортировать вектор, нам нужно вызвать метод sort STL с вектором в качестве аргументов и передать метод пользовательской сортировки в качестве третьего аргумента.

int main() {
  vector<pair<int, int>> v;
  v.push_back(make_pair(1, 5));
  v.push_back(make_pair(1, 3));
  v.push_back(make_pair(2, 6));
  v.push_back(make_pair(2, 4));
  v.push_back(make_pair(5, 24));


  sort(v.begin(), v.end(), cmp);

  return 0;
}

В этом блоке кода мы отсортировали вектор v с использованием метода sort STL. Мы передали метод пользовательской сортировки cmp в качестве третьего параметра.

Распечатайте отсортированный вектор

В этом шаге мы выведем на печать элементы отсортированного вектора. Мы пройдем по вектору с использованием цикла for и выведем первый и второй элементы каждой пары.

int main() {
  // previous code

  for (auto p : v)
  {
      cout << p.first << " " << p.second << endl;
  }
  return 0;
}

В этом финальном блоке кода мы использовали цикл for-each для доступа к парам в векторе и вывода их в консоль. Теперь давайте запустим код, чтобы увидеть результаты.

Запустите код

Для запуска кода вам нужно скомпилировать его с использованием следующей команды:

g++ ~/project/main.cpp -o main &&./main

После запуска кода вы увидите отсортированные пары, напечатанные в порядке возрастания.

Полный пример кода

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(pair<int, int> x, pair<int, int> y)
{
    if (x.first!= y.first)
        return x.first < y.first;
    else
        return x.second < y.second;
}

int main() {
    vector<pair<int, int>> v;
    v.push_back(make_pair(1, 5));
    v.push_back(make_pair(1, 3));
    v.push_back(make_pair(2, 6));
    v.push_back(make_pair(2, 4));
    v.push_back(make_pair(5, 24));

    sort(v.begin(), v.end(), cmp);

    for (auto p : v)
    {
        cout << p.first << " " << p.second << endl;
    }
    return 0;
}

Резюме

В этом практическом занятии мы узнали, как создать метод пользовательской сортировки для шаблона пары и реализовать его с использованием вектора в C++. Мы создали пустой вектор, добавили в него элементы, создали функцию сравнения, использовали функцию sort для сортировки элементов в векторе с использованием нашего метода пользовательской сортировки и распечатали отсортированный вектор. Метод пользовательской сортировки можно использовать для сортировки пар в векторе в соответствии с некоторыми конкретными требованиями или условиями, которые мы определяем в коде.