C++ вектор от двойки

C Vektor Ot Dvojki



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

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







Пример 1: Основна употреба: Итерация върху вектор от двойки

Нека разгледаме основен пример, при който създаваме вектор от двойки, които представляват имената на учениците и съответните им възрасти. Итерацията върху вектор от двойки е подобна на итерацията върху обикновен вектор. Човек може да използва или итератори, или базирани на обхват цикли „for“, за да извлече всяка двойка във вектора.



Този пример показва синтаксиса за „вектор от двойки“ в смислен контекст.



#include
#include <вектор>
#include <помощна програма>

int main ( ) {

std::vector < std::pair < std::string, int >> studentData;

studentData.push_back ( std::make_pair ( 'Адам' , двадесет ) ) ;
studentData.push_back ( std::make_pair ( 'Бил' , 22 ) ) ;
studentData.push_back ( std::make_pair ( 'Чарли' , двадесет и едно ) ) ;

std::cout << „Данни за ученика: ' ;
за ( const auto и студент: studentData ) {
std::cout << „Име:“ << студент.първи << ', Възраст: ' << ученик.втори << std::endl;
}

връщане 0 ;
}


В този кодов фрагмент на C++ започваме с включването на три основни заглавни файла: “ ” за входни и изходни операции, “” за използване на векторния контейнер и “” за достъп до “std:: двойка” шаблон. Тези заглавки ни позволяват да използваме функциите, които са от съществено значение за нашата програма.





Продължавайки напред, в рамките на функцията main(), ние декларираме вектор с име „studentData“, използвайки контейнера „std::vector“. Този вектор е предназначен да съхранява двойките, където всяка двойка капсулира името на ученик (представено като „std::string“) и тяхната възраст (цяло число „int“). След това попълваме вектора „studentData“ с три двойки. Използвайки функцията „push_back“, двойките се добавят към края на вектора, динамично регулирайки неговия размер. След това цикъл преминава през „studentData“, като извлича и отпечатва името и възрастта на всеки ученик. Изходът показва „Данни за ученика:“, което подчертава структурираното представяне. Имената и възрастта на учениците се отпечатват отделно, като ясно представят съхранените данни.



Пример 2: Сортиране на вектор от двойки

Сортирането на вектор от двойки е обичайна операция, особено когато се работи с асоциации ключ-стойност. За тази цел може да се използва функцията “std::sort” от заглавката “ ”. Нека да видим как да сортираме вектор от двойки въз основа на първия и втория елемент:

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

int main ( ) {

std::vector < std::pair < std::string, int >> информация;

info.push_back ( std::make_pair ( 'Петър' , петнадесет ) ) ;
info.push_back ( std::make_pair ( 'Дора' , 29 ) ) ;
info.push_back ( std::make_pair ( 'хана' , двадесет ) ) ;

std::cout << „Оригинална информация: ' ;
за ( const auto и вход: информация ) {
std::cout << „Име:“ << влизане.първо << ', Възраст: ' << влизане.второ << std::endl;
}


std::sort ( info.begin ( ) , инфо.край ( ) ) ;

std::cout << ' Сортирана информация: ' ;
за ( const auto и вход: информация ) {
std::cout << „Възраст:“ << влизане.второ << ', Име: ' << влизане.първо << std::endl;
}

връщане 0 ;
}


В този пример на C++ код ние работим с вектор от двойки, за да съхраняваме и манипулираме данните, свързани с лица, по-специално техните имена и възраст. Инициализираме вектор с име „информация за двойки“ в рамките на функцията main(). Впоследствие попълваме този вектор с три двойки, всяка от които съдържа името и възрастта на отделен човек, като използваме функцията „push_back“ и „std::make_pair“ за ефективно създаване на двойки.

Извеждаме „Оригиналната информация“ към конзолата. Това включва итерация през вектора „информация“ и отпечатване на компонентите на всяка двойка. След това използваме алгоритъма „std::sort“, за да пренаредим вектора „info“ въз основа на оператора за сравнение по подразбиране за двойки, който сравнява първия елемент на всяка двойка (в този случай имената). След операцията по сортиране, ние отново преминаваме през модифицирания „информационен“ вектор, като отпечатваме сортираната информация. Този път резултатът набляга на подреждането по възраст, илюстрирайки резултата от процеса на сортиране.

Пример 3: Комбиниране на вектори от различни типове

Може да срещнете някои ситуации, в които трябва да комбинирате информация от два вектора. Вектор от двойки може да помогне за поддържане на връзката между елементи от двата вектора.

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

int main ( ) {
std::vector < std::string > градове = { 'Ню Йорк' , 'Париж' , 'Токио' } ;
std::vector < вътр > население = { 8175133 , 2140526 , 37435191 } ;

std::vector < std::pair < std::string, int >> cityPopulationPairs;

за ( размер_t i = 0 ; аз < std::min ( градове.размер ( ) , популации.размер ( ) ) ; ++i ) {
cityPopulationPairs.push_back ( { градове [ аз ] , популации [ аз ] } ) ;
}

std::cout << „Двойки град-население:“ << std::endl;
за ( const auto и двойка: cityPopulationPairs ) {
std::cout << 'Град:' << чифт.първо << ', Население: ' << чифт.втори << std::endl;
}

връщане 0 ;
}


В „основната“ функция на кода са декларирани два вектора: „градове“ за съхраняване на имената на градовете и „населения“ за съхраняване на съответните стойности на населението.

Трети вектор, „cityPopulationPairs“, е дефиниран за съхраняване на двойките градове и съответното им население. Всяка двойка е „std::pair“, където „std::string“ представлява името на града, а „int“ представлява населението. След това използваме итерация на цикъл „for“ над векторите (градове и население), използвайки „std::min“, за да гарантираме, че цикълът няма достъп до елементите извън по-малкия от двата размера на вектора. Вътре в цикъла се създават двойки информация за град-население и се добавят към вектора „cityPopulationPairs“.

След комбиниране на информацията се използва друг цикъл „for“ за итериране на двойките, които се съхраняват в „cityPopulationPairs“. След това комбинираните данни се показват на стандартния изход с помощта на „std::cout“, ясно представящ всеки град и съответното му население.

Пример 4: Намиране на максималната и минималната стойност

Идентифицирането на минималните и максималните стойности в рамките на набор от данни е често срещано изискване при алгоритмични и статистически операции. Можем да използваме вектор от двойки, за да следим както максималните, така и минималните стойности в последователност:

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

int main ( ) {
std::vector < вътр > числа = { 5 , 12 , 18 , 3 , 7 , 4 , 33 } ;

std::vector < std::pair < ти, ти >> minMaxPairs;

std::sort ( числа.поч ( ) , числа.край ( ) ) ;

minMaxPairs.push_back ( { числа.пред ( ) , числа.обратно ( ) } ) ;

std::cout << „Минимално-максимални двойки:“ << std::endl;
за ( const auto и двойка: minMaxPairs ) {
std::cout << „Минимум:“ << чифт.първо << ', Макс: ' << чифт.втори << std::endl;
}

връщане 0 ;
}


Предоставеният C++ код демонстрира процеса на намиране на минималните и максималните стойности във вектор от цели числа и след това съхраняване на тези стойности във вектор от двойки. Вектор с име „числа“ първоначално се декларира и инициализира с набор от цели числа. За ефективно идентифициране на минималните и максималните стойности в набора от данни, програмата използва функцията „std::sort“ от библиотеката на алгоритъма.

Тази функция има за цел да подреди елементите във възходящ ред, опростявайки процеса на идентифициране както на минималните, така и на максималните стойности в набора от данни. Операцията за сортиране се прилага към вектора „numbers“ с помощта на numbers.begin() и numbers.end() като параметри на диапазона. След стъпката на сортиране програмата създава вектор от двойки, „minMaxPairs“, за съхраняване на изчислените минимални и максимални стойности. След това функцията „push_back“ се използва за добавяне на една двойка, която съдържа първия (минимум) и последния (максимум) елемент на вектора на сортирани числа. Накрая програмата извежда резултата чрез итерация през вектора „minMaxPairs“ и показва минималните и максималните стойности.

Заключение

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