Клас и обекти
Класът е набор от променливи и функции, които работят заедно, където променливите нямат присвоени стойности. Когато стойностите се присвояват на променливите, класът се превръща в обект. Различните стойности, дадени на един и същи клас, водят до различни обекти; тоест различните обекти са един и същи клас с различни стойности. Създаването на обект от клас се казва като екземпляр на обекта.
Името, unordered_map, е клас. Обект, създаден от класа unordered_map, има избрано от програмист име.
Функция, която принадлежи на клас, е необходима за създаване на екземпляр на обект от класа. В C ++ тази функция има същото име като името на класа. Обектите, създадени (инстанцирани) от класа, имат различни имена, дадени им от програмиста.
Създаването на обект от класа означава конструиране на обекта; това също означава инстанциране.
Програма на C ++, която използва класа unordered_map, започва със следните редове в горната част на файла:
#include#include
използване на пространство от имена std;
Първият ред е за вход / изход. Вторият ред е да се позволи на програмата да използва всички функции на класа unordered_map. Третият ред позволява на програмата да използва имената в стандартното пространство от имена.
Претоварване на функция
Когато два или повече различни подписи на функции имат едно и също име, се казва, че това име е претоварено. Когато се извика една функция, броят и видът аргументи определят коя функция всъщност се изпълнява.
Изграждане / Изграждане на копия
Просто строителство
Неуредена карта може да бъде конструирана и да й се присвоят стойности, както следва:
unordered_mapumap ["банан"] = "жълт";
umap ["грозде"] = "зелено";
umap ["fig"] = "лилаво";
Декларацията започва със специализацията на шаблона с типовете за двойките ключ и стойност. Следва избраното име на програмиста за картата; след това точка и запетая. Вторият кодов сегмент показва как да присвоите стойности на техните ключове.
Изграждане от Initializer_list
Това може да стане по следния начин:
"грозде", "зелено", "смокиня", "лилаво");
Изграждане чрез задаване на Initializer_list
Пример:
"грозде", "зелено", "смокиня", "лилаво";
Изграждане чрез копиране на друга unordered_map
Пример:
"грозде", "зелено", "смокиня", "лилаво");
unordered_map
Двойката Елемент
Следният код показва как да създадете и да получите достъп до елемента на двойката:
двойкаCout << pr.first << '\n';
Cout << pr.second << '\n';
Резултатът е:
дморе
first и second са запазени думи за двата елемента в двойката. Стойностите в двойката все още могат да се променят с помощта на първа и втора.
Извиква се двойка, value_type в темата на неподредената карта.
unordered_map Достъп до елемент
mapped_type & оператор [] (key_type && k)
Връща стойността за съответния ключ. Пример:
umap ["банан"] = "жълт";
umap ["грозде"] = "зелено";
umap ["fig"] = "лилаво";
const char * ret = umap ["грозде"];
Cout << ret <<'\n';
Резултатът е: „зелен“. Стойностите могат да се задават по същия начин - вижте по-горе.
unordered_map Капацитет
size_type size () const noexcept
Връща броя на двойките в картата.
umap ["банан"] = "жълт";
umap ["грозде"] = "зелено";
umap ["fig"] = "лилаво";
Cout << umap.size() <<'\n';
Изходът е 3.
bool empty () const noexcept
Връща 1 за true, ако картата няма двойка и 0 за false, ако има двойки. Пример:
unordered_mapCout << umap.empty() <<'\n';
Изходът е 1.
Връщащи се итератори и клас с неподредена карта
Итераторът е като указател, но има повече функционалност от показалеца.
begin () noexcept
Връща итератор, който сочи към първата двойка от обекта на картата, както в следния кодов сегмент:
unordered_mapumap ["банан"] = "жълт"; umap ["грозде"] = "зелено"; umap ["fig"] = "лилаво";
unordered_map
двойка
Cout << pr.first << ", " << pr.second << '\n';
Резултатът е: смокиня, лилаво. Картата не е подредена.
begin () const noexcept;
Връща итератор, който сочи към първия елемент от колекцията от обекти на картата. Когато конструкцията на обекта се предшества от const, изразът “begin () const” се изпълнява вместо “begin ()”. При това условие елементите в обекта не могат да бъдат модифицирани. Използва се например в следния код.
const unordered_map"грозде", "зелено", "смокиня", "лилаво");
unordered_map
двойка
Cout << pr.first << ", " << pr.second << '\n';
Резултатът е: смокиня, лилаво. Картата не е подредена. Обърнете внимание, че const_iterator е използван този път, вместо само итератор, за получаване на върнатия итератор.
end () noexcept
Връща итератор, който сочи непосредствено след последния елемент на обекта на картата.
end () const noexcept
Връща итератор, който сочи непосредствено след последния елемент на обекта на картата. Когато конструкцията на обекта на картата се предшества от const, изразът „end () const“ се изпълнява вместо „end ()“.
unordered_map Операции
намиране на итератор (const key_type & k)
Търси чифт от дадения ключ на картата. Ако бъде намерен, той връща итератора. Ако не бъде намерен, той връща итератор, който сочи към края на картата, който не е двойка. Следният код показва как да използвате тази функция член:
unordered_mapumap ['a'] = 'b'; umap ['c'] = 'd'; umap ['e'] = 'f';
unordered_map
ако (umap.намери ('c') != umap.край())
двойка
Cout << pr.first << ", " << pr.second << '\n';
Резултатът е: c, d
const_iterator намери (const key_type & k) const;
Тази версия на функцията се извиква, ако създаването на неподредената карта започва с const, което прави всички елементи на картата само за четене.
unordered_map Модификатори
двойка
Неуредената карта означава, че двойките не са в произволен ред. Така че програмата вмъква двойката на всяко място, което намери за удобно. Функцията се връща, сдвоява
umap ["банан"] = "жълт";
umap ["грозде"] = "зелено";
umap ["fig"] = "лилаво";
umap.вмъкване ("череша", "червено", "ягода", "червено");
Cout << umap.size() << '\n';
Резултатът е: 5. Могат да се вмъкнат повече от една двойка.
изтриване на размер_тип (const key_type & k)
Тази функция изтрива двойка от unordered_map. Следният кодов сегмент илюстрира:
unordered_mapumap ["банан"] = "жълт";
umap ["грозде"] = "зелено";
umap ["fig"] = "лилаво";
int num = umap.изтриване ("грозде");
Cout << umap.size() << '\n';
Изходът е 2.
сменяне на празнота (unordered_map &)
Две неподредени карти могат да бъдат заменени, както е илюстрирано в този кодов сегмент:
"грозде", "зелено", "смокиня", "лилаво", "ягода", "червено";
unordered_map
umap1.суап (umap2);
unordered_map
двойка
unordered_map
двойка
Cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
Cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map
"грозде", "зелено", "смокиня", "лилаво", "ягода", "червено";
unordered_map
umap1.суап (umap2);
unordered_map
двойка
unordered_map
двойка
Cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
Cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Резултатът е:
Първи ключ и размер на umap1: вар, 2
Първи ключ и размер на umap2 ягода, 4
Картата не е подредена. Имайте предвид, че дължината на картата се увеличава, ако е необходимо. Типовете данни трябва да са еднакви.
Клас и неговите инстанцирани обекти
Стойността е към тип данни, както инстанцираният обект е към клас. Неуредената конструкция на карта може също да приеме клас като тип данни. Следващата програма илюстрира това:
#include#include
използване на пространство от имена std;
клас TheCla
публично:
int num;
статичен символ;
void func (char cha, const char * str)
Cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
статично празно забавление (char ch)
ако (ch == 'a')
Cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map
umap = "банан", obj1, "грозде", obj2, "смокиня", obj3, "ягода", obj4, "вар", obj5;
Cout << umap.size() << '\n';
връщане 0;
Резултатът е: 5.
Определението на класа има два публични члена за данни и две функции за публичен член. Във функцията main () се създават екземпляри на различни обекти за класа. След това се създава неподредена карта, където всяка двойка се състои от името на плод и обект от класа. Показва се размерът на картата. Програмата се компилира без предупреждение или съобщение за грешка.
Приложение на картата
Масивът свързва индекс със стойност. Двойките ключ / стойност съществуват в много ситуации в живота, които могат да бъдат програмирани. Двойката ключ / стойност плодове / цвят е само един пример. Друг пример е името на хората и тяхната възраст. В този случай двойката ще бъде от тип, двойка
Формиране на карта
Картата не е двуизмерен масив с две колони. Карта работи с хеш функция. Ключът се кодира от хеш функцията в цяло число на масив. Този масив съдържа стойностите. И така, всъщност има един масив със стойностите и ключовете се съпоставят с индексите на масива и така съответствията между ключовете и стойностите. Хеширането е обширна тема и не е разгледано в тази статия.
Заключение
Карта, известна също като асоциативен масив, е списък с елементи, където всеки елемент е двойка ключ / стойност. И така, всеки ключ съответства на стойност. В C ++ картата е реализирана като структура от данни с функции на членове и оператори. Подредената карта е тази, при която двойките елементи са подредени по ключове. Неуредената карта е тази, при която няма подреждане.
Технически хешът се състои от двойка
Списъкът за инициализация на картата е литерал на масив от литерали. Всеки вътрешен литерал се състои от два обекта, двойката ключ / стойност.
Функциите-членове и операторите за unordered_map могат да бъдат категоризирани в следните заглавия: unordered_map construction / copy constructing, unordered_map Capacity, unordered_map iterator, unordered_map Operations и unordered_map Modifiers.
Неподредена карта се използва, когато ключът трябва да бъде преобразуван в стойност.
Chrys