Вектор пар C++

Vektor Par C



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

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







Пример 1. Базовое использование: перебор вектора пар

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



В этом примере демонстрируется синтаксис «вектора пар» в значимом контексте.



#include
#include <вектор>
#include <утилита>

int главный ( ) {

станд::вектор < станд::пара < станд::строка, интервал >> данные студента;

StudentData.push_back ( std::make_pair ( 'Адам' , двадцать ) ) ;
StudentData.push_back ( std::make_pair ( 'Счет' , 22 ) ) ;
StudentData.push_back ( std::make_pair ( 'Чарли' , двадцать один ) ) ;

станд::cout << «Данные студента: \п ' ;
для ( константное авто & студент: StudentData ) {
станд::cout << 'Имя: ' << студент.первый << ', Возраст: ' << студент.второй << станд::эндл;
}

возвращаться 0 ;
}


В этом фрагменте кода C++ мы начинаем с включения трех основных заголовочных файлов: « » для операций ввода и вывода, «» для использования векторного контейнера и «» для доступа к «std:: пара». Эти заголовки позволяют нам использовать функции, необходимые для нашей программы.





Двигаясь дальше, внутри функции main() мы объявляем вектор с именем «studentData», используя контейнер «std::vector». Этот вектор предназначен для хранения пар, каждая из которых инкапсулирует имя учащегося (представленное как «std::string») и его возраст (целое число «int»). Затем мы заполняем вектор «studentData» тремя парами. С помощью функции push_back пары добавляются в конец вектора, динамически регулируя его размер. Затем цикл выполняет итерацию по «studentData», извлекая и печатая имя и возраст каждого ученика. В выходных данных отображается «Данные о студенте:», что подчеркивает структурированное представление. Имена и возраст учащихся напечатаны отдельно, что четко отображает сохраненные данные.



Пример 2. Сортировка вектора пар

Сортировка вектора пар — распространенная операция, особенно при работе с ассоциациями ключ-значение. Для этой цели можно использовать функцию «std::sort» из заголовка « ». Давайте посмотрим, как отсортировать вектор пар на основе первого и второго элементов:

#include
#include <вектор>
#include <алгоритм>

int главный ( ) {

станд::вектор < станд::пара < станд::строка, интервал >> Информация;

info.push_back ( std::make_pair ( 'Питер' , пятнадцать ) ) ;
info.push_back ( std::make_pair ( 'Дора' , 29 ) ) ;
info.push_back ( std::make_pair ( 'Ханна' , двадцать ) ) ;

станд::cout << «Оригинальная информация: \п ' ;
для ( константное авто & запись: информация ) {
станд::cout << 'Имя: ' << запись.первая << ', Возраст: ' << запись.секунда << станд::эндл;
}


станд::сортировка ( информация.begin ( ) , информация.конец ( ) ) ;

станд::cout << ' \п Сортированная информация: \п ' ;
для ( константное авто & запись: информация ) {
станд::cout << 'Возраст: ' << запись.секунда << ', Имя: ' << запись.первая << станд::эндл;
}

возвращаться 0 ;
}


В этом примере кода C++ мы работаем с вектором пар для хранения и манипулирования данными, относящимися к отдельным лицам, в частности, их именам и возрасту. Мы инициализируем вектор с именем «информация о парах» внутри функции main(). Впоследствии мы заполняем этот вектор тремя парами, каждая из которых содержит имя и возраст отдельного человека, используя функцию «push_back» и «std::make_pair» для эффективного создания пар.

Выводим «Исходную информацию» на консоль. Это включает в себя перебор вектора «информации» и печать компонентов каждой пары. Затем мы используем алгоритм «std::sort» для перестановки вектора «info» на основе оператора сравнения пар по умолчанию, который сравнивает первый элемент каждой пары (в данном случае имена). После операции сортировки мы снова перебираем модифицированный вектор «информации», печатая отсортированную информацию. На этот раз выходные данные подчеркивают порядок сортировки по возрасту, иллюстрируя результат процесса сортировки.

Пример 3: Объединение векторов разных типов

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

#include
#include <вектор>

int главный ( ) {
станд::вектор < станд::строка > города = { 'Нью-Йорк' , 'Париж' , «Токио» } ;
станд::вектор < интервал > население = { 8175133 , 2140526 , 37435191 } ;

станд::вектор < станд::пара < станд::строка, интервал >> городНаселениеПары;

для ( size_t я = 0 ; я < станд::мин ( города.размер ( ) , популяция.размер ( ) ) ; ++я ) {
cityPopulationPairs.push_back ( { города [ я ] , население [ я ] } ) ;
}

станд::cout << «Пары город-население:» << станд::эндл;
для ( константное авто & пара: cityPopulationPairs ) {
станд::cout << 'Город: ' << пара.первая << ', Население: ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


В основной функции кода объявляются два вектора: «города» для хранения названий городов и «население» для хранения соответствующих значений численности населения.

Третий вектор, «cityPopulationPairs», определен для хранения пар городов и их населения. Каждая пара имеет вид «std::pair», где «std::string» представляет собой название города, а «int» представляет численность населения. Затем мы используем итерацию цикла «for» по векторам (города и население), используя «std::min», чтобы гарантировать, что цикл не обращается к элементам, выходящим за пределы меньшего из двух размеров вектора. Внутри цикла создаются пары информации о городе и населении, которые добавляются к вектору «cityPopulationPairs».

После объединения информации используется еще один цикл «for» для перебора пар, хранящихся в «cityPopulationPairs». Объединенные данные затем отображаются в стандартном выводе с использованием «std::cout», четко представляя каждый город и соответствующее население.

Пример 4: Нахождение максимального и минимального значений

Определение минимальных и максимальных значений в наборе данных является общим требованием в алгоритмических и статистических операциях. Мы можем использовать вектор пар, чтобы отслеживать как максимальные, так и минимальные значения в последовательности:

#include
#include <вектор>
#include <алгоритм>

int главный ( ) {
станд::вектор < интервал > числа = { 5 , 12 , 18 , 3 , 7 , 4 , 33 } ;

станд::вектор < станд::пара < ты, ты >> минМаксПарс;

станд::сортировка ( цифры.begin ( ) , цифры.конец ( ) ) ;

minMaxPairs.push_back ( { цифры.фронт ( ) , цифры.назад ( ) } ) ;

станд::cout << «Пары Мин-Макс:» << станд::эндл;
для ( константное авто & пара: minMaxPairs ) {
станд::cout << 'Мин: ' << пара.первая << ', Макс: ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


Приведенный код C++ демонстрирует процесс поиска минимального и максимального значений в векторе целых чисел и последующего сохранения этих значений в векторе пар. Вектор с именем «numbers» изначально объявляется и инициализируется набором целых чисел. Чтобы эффективно определить минимальные и максимальные значения в наборе данных, программа использует функцию «std::sort» из библиотеки алгоритмов.

Цель этой функции — расположить элементы в порядке возрастания, упрощая процесс определения как минимальных, так и максимальных значений в наборе данных. Операция сортировки применяется к вектору «числа» с использованием Numbers.begin() и Numbers.end() в качестве параметров диапазона. После этапа сортировки программа создает вектор пар «minMaxPairs» для хранения вычисленных минимальных и максимальных значений. Затем используется функция «push_back» для добавления одной пары, которая содержит первый (минимум) и последний (максимум) элементы вектора отсортированных чисел. Наконец, программа выводит результат, перебирая вектор «minMaxPairs» и отображая минимальное и максимальное значения.

Заключение

В заключение отметим, что вектор пар C++ представляет собой мощную и гибкую структуру данных, добавляющую гибкость задачам программирования. Благодаря детальному изучению его синтаксиса и практического применения мы увидели, как этот контейнер помогает организовать ассоциации «ключ-значение», объединить информацию из разных векторов и отслеживать минимальные и максимальные значения.