Сортировать неупорядоченное множество с использованием STL

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии вы научитесь сортировать неупорядоченное множество на языке программирования C++. Вы узнаете о основных концепциях неупорядоченного множества и его реализации.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/FunctionsGroup(["Functions"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/StandardLibraryGroup(["Standard Library"]) cpp/BasicsGroup -.-> cpp/operators("Operators") cpp/FunctionsGroup -.-> cpp/function_parameters("Function Parameters") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/user_input("User Input") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/StandardLibraryGroup -.-> cpp/standard_containers("Standard Containers") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/operators -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/function_parameters -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/output -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/user_input -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/files -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/standard_containers -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} cpp/code_formatting -.-> lab-96215{{"Сортировать неупорядоченное множество с использованием STL"}} end

Откройте терминал и настройте рабочую директорию

Для начала откройте терминал и введите следующую команду, чтобы перейти в директорию project:

cd project

Создайте файл на C++

Теперь создайте новый файл с именем main.cpp в директории project. В этом файле будет содержаться код для сортировки неупорядоченного множества.

touch main.cpp

Напишите код

Скопируйте и вставьте следующий код в файл main.cpp.

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

using namespace std;

bool cmp(int x, int y)
{
    if (x > y)
        return true;
    else
        return false;
}

// Функция для вывода элементов неупорядоченного множества с использованием итератора
void show(unordered_set<int> s)
{
    // Объявление итератора для перебора неупорядоченного множества
    unordered_set<int>::iterator i;

    for (i = s.begin(); i!= s.end(); i++)
    {
        cout << *i << "  "; // Доступ к элементам неупорядоченного множества с использованием * так как i хранит адрес каждого элемента
    }

    cout << endl;
}

int main()
{
    cout << "\n\nДобро пожаловать в LabEx :-)\n\n\n";
    cout << " =====  Программа для демонстрации сортировки неупорядоченного множества на CPP  ===== \n\n\n\n";

    cout << " *** Неупорядоченное множество автоматически удаляет дублирующие элементы и сохраняет случайный порядок. *** \n\n";

    cout << " *** Этот случайный порядок зависит от хэш-функции, которая используется внутри. *** \n\n";

    cout << " *** Неупорядоченное множество можно отсортировать, скопировав его элементы в Vector. *** \n\n";

    // Объявление неупорядоченного множества (неупорядоченное множество целых чисел)
    unordered_set<int> s;

    // Заполнение элементов с использованием метода insert()
    cout << "\n\nЗаполнение неупорядоченного множества целыми числами в случайном порядке. " // В отличие от Set, это не автоматически сортируется

    s.insert(5);
    s.insert(39);
    s.insert(64);
    s.insert(82);
    s.insert(35);
    s.insert(54);

    cout << "\n\nЭлементы неупорядоченного множества перед сортировкой: ";
    show(s);

    // Объявление вектора и инициализация его элементами неупорядоченного множества
    vector<int> v(s.begin(), s.end());

    // Сортировка элементов вектора в порядке убывания с использованием пользовательского компаратора
    sort(v.begin(), v.end(), cmp);

    cout << "\n\nЭлементы неупорядоченного множества после сортировки в порядке убывания с использованием пользовательского метода сортировки: \n";

    // Объявление итератора для перебора вектора
    vector<int>::iterator it;

    for (it = v.begin(); it!= v.end(); it++)
    {
        cout << *it << "  "; // Доступ к элементам вектора с использованием * так как i хранит адрес каждого элемента
    }

    cout << "\n\n\n";

    return 0;
}

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

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

g++ main.cpp -o main

Эта команда создаст исполняемый файл с именем main.

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

./main

В терминале вы должны увидеть вывод программы.

Завершите лабораторную работу

Скопируйте окончательный код в файл ~/project/main.cpp:

// ~/project/main.cpp
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool cmp(int x, int y)
{
    if (x > y)
        return true;
    else
        return false;
}

// Функция для вывода элементов неупорядоченного множества с использованием итератора
void show(unordered_set<int> s)
{
    // Объявление итератора для перебора неупорядоченного множества
    unordered_set<int>::iterator i;

    for (i = s.begin(); i!= s.end(); i++)
    {
        cout << *i << "  "; // Доступ к элементам неупорядоченного множества с использованием * так как i хранит адрес каждого элемента
    }

    cout << endl;
}

int main()
{
    cout << "\n\nДобро пожаловать в LabEx :-)\n\n\n";
    cout << " =====  Программа для демонстрации сортировки неупорядоченного множества на CPP  ===== \n\n\n\n";

    cout << " *** Неупорядоченное множество автоматически удаляет дублирующие элементы и сохраняет случайный порядок. *** \n\n";

    cout << " *** Этот случайный порядок зависит от хэш-функции, которая используется внутри. *** \n\n";

    cout << " *** Неупорядоченное множество можно отсортировать, скопировав его элементы в Vector. *** \n\n";

    // Объявление неупорядоченного множества (неупорядоченное множество целых чисел)
    unordered_set<int> s;

    // Заполнение элементов с использованием метода insert()
    cout << "\n\nЗаполнение неупорядоченного множества целыми числами в случайном порядке. " // В отличие от Set, это не автоматически сортируется

    s.insert(5);
    s.insert(39);
    s.insert(64);
    s.insert(82);
    s.insert(35);
    s.insert(54);

    cout << "\n\nЭлементы неупорядоченного множества перед сортировкой: ";
    show(s);

    // Объявление вектора и инициализация его элементами неупорядоченного множества
    vector<int> v(s.begin(), s.end());

    // Сортировка элементов вектора в порядке убывания с использованием пользовательского компаратора
    sort(v.begin(), v.end(), cmp);

    cout << "\n\nЭлементы неупорядоченного множества после сортировки в порядке убывания с использованием пользовательского метода сортировки: \n";

    // Объявление итератора для перебора вектора
    vector<int>::iterator it;

    for (it = v.begin(); it!= v.end(); it++)
    {
        cout << *it << "  "; // Доступ к элементам вектора с использованием * так как i хранит адрес каждого элемента
    }

    cout << "\n\n\n";

    return 0;
}

Резюме

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