Ц ++

Како се користи Ц ++ неуређена мапа

Како се користи Ц ++ неуређена мапа
Мапа, позната и као асоцијативни низ је листа елемената, где је сваки елемент пар кључ / вредност. Дакле, сваки кључ одговара вредности. Различити тастери могу имати исту вредност, за уобичајени рад. На пример, тастери могу бити листа воћа и одговарајуће вредности, боје плодова. У Ц ++, мапа је имплементирана као структура података са функцијама члана и операторима. Уређена карта је она на којој су парови елемената поређани по кључевима. Неуређена карта је она на којој нема реда. Овај чланак објашњава како се користи Ц ++ неуређена мапа, написана као унордеред_мап. Потребно вам је знање о Ц ++ показивачима да бисте разумели овај чланак. унордеред_мап је део Ц ++ стандардне библиотеке.

Класа и предмети

Класа је скуп променљивих и функција које раде заједно, где променљиве немају додељене вредности. Када су променљивим додељене вредности, класа постаје објект. Различите вредности дате истој класи резултирају различитим објектима; односно различити објекти су иста класа са различитим вредностима. Стварање објекта из класе каже се да је инстанцирање објекта.

Име, унордеред_мап, је класа. Објект креиран из класе унордеред_мап има изабрано име програмера.

Функција која припада класи је потребна за инстанцирање објекта из класе. У Ц ++, та функција има исто име као и назив класе. Објекти створени (инстанцирани) из класе имају различита имена која им даје програмер.

Стварање објекта из класе значи конструисање објекта; то такође значи инстанцирање.

Програм Ц ++ који користи класу унордеред_мап започиње следећим редовима на врху датотеке:

#инцлуде
#инцлуде
коришћење простора имена стд;

Прва линија је за улаз / излаз. Други ред је омогућити програму да користи све карактеристике класе унордеред_мап. Трећи ред омогућава програму да користи имена у стандардном простору имена.

Преоптерећење функције

Када два или више различитих потписа функције имају исто име, каже се да је то име преоптерећено. Када се позове једна функција, број и врста аргумената одређују која се функција заправо извршава.

Конструисање / Израда копија

Једноставна конструкција

Неуређена карта може се конструисати и доделити јој вредности на следећи начин:

унордеред_мап умап;
умап ["банана"] = "жута";
умап ["грожђе"] = "зелено";
умап ["фиг"] = "љубичаста";

Декларација започиње специјализацијом за предложак са типовима за парове кључ и вредност. Након тога следи назив програмера за мапу; затим тачка и зарез. Други сегмент кода показује како доделити вредности њиховим кључевима.
Конструкција по Инитиализер_лист
То се може учинити на следећи начин:

унордеред_мап умап ("банана", "жута",
"грожђе", "зелено", "смоква", "љубичасто"));

Конструкција додељивањем Инитиализер_лист
Пример:

унордеред_мап умап = "банана", "жута",
"грожђе", "зелено", "смоква", "љубичасто";

Конструкција копирањем друге неуређене_карте
Пример:

унордеред_мап умап1 ("банана", "жута",
"грожђе", "зелено", "смоква", "љубичасто"));
унордеред_мап умап2 (умап1);

Пар Елемент

Следећи код показује како створити и приступити елементу пара:

пар пр = 'д', "море";
цоут << pr.first << '\n';
цоут << pr.second << '\n';

Излаз је:

д
море

прва и друга су резервисане речи за две ставке у пару. Вредности у пару се и даље могу мењати помоћу првог и другог.

Пар се назива, валуе_типе у теми неуређене мапе.

унордеред_мап Приступ елементима

маппед_типе & оператор [] (кеи_типе && к)
Враћа вредност за одговарајући кључ. Пример:

унордеред_мап умап;
умап ["банана"] = "жута";
умап ["грожђе"] = "зелено";
умап ["фиг"] = "љубичаста";
цонст цхар * рет = умап ["грожђе"];
цоут << ret <<'\n';

Резултат је: „зелено“. Вредности се могу доделити на исти начин - видети горе.

унордеред_мап Капацитет

сизе_типе сизе () цонст ноекцепт
Приказује број парова на мапи.

унордеред_мап умап;
умап ["банана"] = "жута";
умап ["грожђе"] = "зелено";
умап ["фиг"] = "љубичаста";
цоут << umap.size() <<'\n';

Излаз је 3.

боол емпти () цонст ноекцепт

Враћа 1 за тачно ако мапа нема пара и 0 за нетачно ако има парове. Пример:

унордеред_мап умап;
цоут << umap.empty() <<'\n';

Излаз је 1.

Повратак Итератора и класе неуређених мапа

Итератор је попут показивача, али има више функционалности од показивача.

бегин () ноекцепт

Враћа итератор који показује на први пар објекта мапе, као у следећем сегменту кода:

унордеред_мап умап;
умап ["банана"] = "жута"; умап ["грожђе"] = "зелено"; умап ["фиг"] = "љубичаста";
унордеред_мап:: итератор итер = умап.почети();
пар пр = * итер;
цоут << pr.first << ", " << pr.second << '\n';

Излаз је: смоква, љубичаста. Карта је неуређена.

бегин () цонст ноекцепт;

Враћа итератор који показује на први елемент колекције објеката мапе. Када конструкцији објекта претходи цонст, израз „бегин () цонст“ се извршава уместо „бегин ()“. Под овим условом, елементи у објекту не могу се мењати. На пример, користи се у следећем коду.

цонст унордеред_мап умап ("банана", "жута",
"грожђе", "зелено", "смоква", "љубичасто"));
унордеред_мап:: цонст_итератор итер = умап.почети();
пар пр = * итер;
цоут << pr.first << ", " << pr.second << '\n';

Излаз је: смоква, љубичаста. Карта је неуређена. Имајте на уму да је цонст_итератор овај пут коришћен уместо само итератора за примање враћеног итератора.

енд () ноекцепт

Враћа итератор који показује одмах иза последњег елемента објекта мапе.

енд () цонст ноекцепт

Враћа итератор који показује одмах иза последњег елемента објекта мапе. Када конструкцији објекта мапе претходи цонст, уместо „енд ()“ извршава се израз „енд () цонст“.

унордеред_мап Оператионс

проналажење итератора (цонст кеи_типе & к)

Тражи пар датог кључа на мапи. Ако је пронађен, враћа итератор. Ако није пронађен, враћа итератор који показује на крај мапе, што није пар. Следећи код показује како се користи ова функција члана:

унордеред_мап умап;
умап ['а'] = 'б'; умап ['ц'] = 'д'; умап ['е'] = 'ф';
унордеред_мап:: итератор итер = умап.пронађи ('ц');
ако (умап.пронађи ('ц') != умап.крај())

пар пр = * итер;
цоут << pr.first << ", " << pr.second << '\n';

Излаз је: ц, д

цонст_итератор пронађи (цонст кеи_типе & к) цонст;

Ова верзија функције се позива ако стварање неуређене мапе започне са цонст, чинећи све елементе мапе само за читање.

унордеред_мап Модификатори

пар инсерт (валуе_типе && обј)
Неуређена карта значи да парови нису у било којем редоследу. Дакле, програм убацује пар на било које место које сматра погодним. Функција се враћа, упари. Ако је уметање било успешно, боол ће бити 1 за труе, иначе би био 0 за фалсе. Ако је уметање успешно, итератор ће показати на ново уметнути елемент. Следећи код илуструје употребу:

унордеред_мап умап;
умап ["банана"] = "жута";
умап ["грожђе"] = "зелено";
умап ["фиг"] = "љубичаста";
умап.инсерт ("цхерри", "ред", "јагода", "црвена");
цоут << umap.size() << '\n';

Излаз је: 5. Може се убацити више од једног пара.

брисање величине_типа (цонст кеи_типе & к)

Ова функција брише пар из неуређене_мапе. Следећи сегмент кода илуструје:

унордеред_мап умап;
умап ["банана"] = "жута";
умап ["грожђе"] = "зелено";
умап ["фиг"] = "љубичаста";
инт нум = умап.брисање („грожђе“);
цоут << umap.size() << '\n';

Излаз је 2.
размена празнина (неуређена_мапа &)
Две неуређене мапе могу се заменити, као што је приказано у овом сегменту кода:

унордеред_мап умап1 = "банана", "жута",
"грожђе", "зелено", "смоква", "љубичаста", "јагода", "црвена";
унордеред_мап умап2 = "трешња", "црвена", "креч", "зелена";
умап1.свап (умап2);
унордеред_мап:: итератор итер1 = умап1.почети();
пар пр1 = * итер1;
унордеред_мап:: итератор итер2 = умап2.почети();
пар пр2 = * итер2;
цоут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
цоут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
унордеред_мап умап1 = "банана", "жута",
"грожђе", "зелено", "смоква", "љубичаста", "јагода", "црвена";
унордеред_мап умап2 = "трешња", "црвена", "креч", "зелена";
умап1.свап (умап2);
унордеред_мап:: итератор итер1 = умап1.почети();
пар пр1 = * итер1;
унордеред_мап:: итератор итер2 = умап2.почети();
пар пр2 = * итер2;
цоут << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
цоут << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';

Излаз је:

Први кључ и величина умап1: креч, 2

Први кључ и величина умап2 јагоде, 4

Карта је неуређена. Имајте на уму да се дужина карте по потреби повећава. Типови података морају бити исти.

Класа и њени инстанцирани објекти

Вредност је за тип података, као инстанцирани објекат за класу. Неуређена конструкција мапе такође може прихватити класу као тип података. Следећи програм то илуструје:

#инцлуде
#инцлуде
коришћење простора имена стд;
класа ТхеЦла

јавно:
инт нум;
статички знак;
воид фунц (цхар цха, цонст цхар * стр)

цоут << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

статична воид забава (цхар цх)

ако (цх == 'а')
цоут << "Official static member function" << '\n';

;
инт маин ()

ТхеЦла обј1; ТхеЦла обј2; ТхеЦла обј3; ТхеЦла обј4; ТхеЦла обј5;
унордеред_мап умап;
умап = "банана", обј1, "грожђе", обј2, "смоква", обј3, "јагода", обј4, "креч", обј5;
цоут << umap.size() << '\n';
ретурн 0;

Излаз је: 5.

Дефиниција класе има два члана јавног података и две јавне функције члана. У функцији маин () инстанцирају се различити објекти за класу. Затим се успоставља неуређена карта, где се сваки пар састоји од имена воћа и предмета из класе. Приказује се величина карте. Програм се компајлира без упозорења или поруке о грешци.

Примена карте

Низ придружује индекс вредности. Парови кључ / вредност постоје у многим животним ситуацијама, које је могуће програмирати. Пар кључ / вредност воће / боја само је један пример. Други пример је име људи и њихове старости. У овом случају, пар ће бити типа, пар. Може бити и пар. У овом другом случају користиће се директива о преради. Пар кључ / вредност и даље могу бити имена брачних парова. У земљама у којима постоји полигамија, постојаће различите жене за једног мушкарца.

Формирање карте

Карта није дводимензионални низ, са два ступца. Мапа ради са хеш функцијом. Кључ се кодира помоћу функције хеширања у цео број низа. Овај низ држи вредности. Дакле, заправо постоји један низ са вредностима, а кључеви се пресликавају на индексе низа, и тако се праве кореспонденције између кључева и вредности. Хеширање је опсежна тема и није обухваћено овим чланком.

Закључак

Мапа, позната и као асоцијативни низ је листа елемената, где је сваки елемент пар кључ / вредност. Дакле, сваки кључ одговара вредности. У Ц ++, мапа је имплементирана као структура података са функцијама члана и операторима. Уређена карта је она на којој су парови елемената поређани по кључевима. Неуређена карта је она на којој нема наручивања.

Технички, хеш се састоји од пара елементи. Заправо, пар је цела структура података са својим функцијама-чланицама и операторима. Два параметра предлошка за пар су иста два параметра предлошка за унордеред_мап.

Листа иницијализатора за мапу је низ литерала. Сваки интерни литерал састоји се од два објекта, пара кључ / вредност.

Функције члана и оператори за неуређену_мапу могу се сврстати у следеће наслове: неуређена_мапа конструкција / конструкција копија, неуређена_мапа Капацитет, неуређена_мапа итератор, неуређена_мапа операције и неуређена_мапа модификатори.

Неуређена карта се користи када кључ треба пресликати у вредност.

Цхрис

Најбољи емулатори играће конзоле за Линук
Овај чланак ће навести популарни софтвер за емулацију играће конзоле доступан за Линук. Емулација је слој компатибилности софтвера који опонаша хардве...
Најбољи Линук Дистрос за игре у 2021
Линук оперативни систем далеко је превалио свој изворни, једноставни изглед заснован на серверима. Овај ОС се изузетно побољшао последњих година и сад...
Како снимити и стримовати своју играћу сесију на Линук-у
У прошлости се играње игара сматрало само хобијем, али с временом је играчка индустрија забележила огроман раст у погледу технологије и броја играча. ...