Mapy jsou součástí C++ STL (Standard Template Library). Mapy jsou asociativní kontejnery, které ukládají setříděný pár klíč–hodnota, ve kterém je každý klíč jedinečný a lze jej vložit nebo odstranit, ale nelze jej změnit. Hodnoty spojené s klíči lze změnit.
Například: Mapu zaměstnanců, kde je ID zaměstnance klíčem a jméno je hodnotou, lze reprezentovat jako:
| Klíče | Hodnoty |
|---|---|
| 101 | Nikita |
| 102 | Červenka |
| 103 | Hluboký |
| 104 | John |
Syntax
template <class key, map::key_type class t, map::mapped_type compare="less," map::key_compare alloc="allocator<pair"> // map::allocator_type > class map; </class>
Parametr
klíč: Klíčový datový typ, který se má uložit do mapy.
typ: Datový typ hodnoty, která má být uložena v mapě.
porovnej: Porovnávací třída, která přebírá dva argumenty stejného typu bool a vrací hodnotu. Tento argument je volitelný a binární predikát less je výchozí hodnotou.
alokovat: Typ objektu alokátoru. Tento argument je volitelný a výchozí hodnota je alokátor .
teorie automatů
Vytvoření mapy
Mapy lze snadno vytvořit pomocí následujícího příkazu:
typedef pair value_type;
Výše uvedený formulář se použije k vytvoření mapy s klíčem typu Typ klíče a hodnotu typu typ hodnoty. Jedna důležitá věc je, že klíč mapy a odpovídající hodnoty jsou vždy vloženy jako pár, nelze do mapy vložit pouze klíč nebo jen hodnotu.
Příklad 1
#include #include #include #include using namespace std; int main() { map Employees; // 1) Assignment using array index notation Employees[101] = 'Nikita'; Employees[105] = 'John'; Employees[103] = 'Dolly'; Employees[104] = 'Deep'; Employees[102] = 'Aman'; cout << 'Employees[104]=' << Employees[104] << endl << endl; cout << 'Map size: ' << Employees.size() << endl; cout << endl << 'Natural Order:' << endl; for( map::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ': ' << (*ii).second << endl; } cout << endl << 'Reverse Order:' << endl; for( map::reverse_iterator ii=Employees.rbegin(); ii!=Employees.rend(); ++ii) { cout << (*ii).first << ': ' << (*ii).second << endl; } } Výstup:
Employees[104]=Deep Map size: 5 Natural Order: 101: Nikita 102: Aman 103: Dolly 104: Deep 105: John Reverse Order: 105: John 104: Deep 103: Dolly 102: Aman 101: Nikita
Funkce členů
Níže je uveden seznam všech členských funkcí mapy:
Stavitel/ničitel
| Funkce | Popis |
|---|---|
| konstruktéři | Vytvořte mapu |
| ničitelé | Destruktor map |
| operátor= | Zkopírujte prvky mapy na jinou mapu. |
Iterátory
| Funkce | Popis |
|---|---|
| začít | Vrátí iterátor ukazující na první prvek v mapě. |
| cbegin | Vrátí const iterator ukazující na první prvek v mapě. |
| konec | Vrátí iterátor ukazující na minulý konec. |
| trochu | Vrátí konstantní iterátor ukazující na minulý konec. |
| začít | Vrátí zpětný iterátor ukazující na konec. |
| dělá | Vrátí zpětný iterátor ukazující na začátek. |
| crbegin | Vrátí konstantní reverzní iterátor ukazující na konec. |
| věřit | Vrátí konstantní reverzní iterátor ukazující na začátek. |
Kapacita
| Funkce | Popis |
|---|---|
| prázdný | Pokud je mapa prázdná, vrátí hodnotu true. |
| velikost | Vrátí počet prvků v mapě. |
| max_size | Vrátí maximální velikost mapy. |
Přístup k prvku
| Funkce | Popis |
|---|---|
| operátor[] | Získejte prvek s daným klíčem. |
| na | Získejte prvek s daným klíčem. |
Modifikátory
| Funkce | Popis |
|---|---|
| vložit | Vložit prvek do mapy. |
| vymazat | Vymazat prvky z mapy. |
| vyměnit | Vyměňte obsah mapy. |
| Průhledná | Odstraňte všechny prvky mapy. |
| umístění | Vytvořte a vložte nové prvky do mapy. |
| emplace_hint | Vytvářejte a vkládejte nové prvky do mapy pomocí nápovědy. |
Pozorovatelé
| Funkce | Popis |
|---|---|
| key_comp | Vraťte kopii objektu porovnání klíčů. |
| value_comp | Vraťte kopii objektu porovnání hodnot. |
Operace
| Funkce | Popis |
|---|---|
| nalézt | Vyhledejte prvek s daným klíčem. |
| počet | Získá počet prvků odpovídajících danému klíči. |
| dolní_mez | Vrátí iterátor na spodní hranici. |
| horní hranice | Vrátí iterátor na horní hranici. |
| stejný_rozsah | Vrátí rozsah prvků odpovídajících danému klíči. |
Alokátor
| Funkce | Popis |
|---|---|
| get_allocator | Vrátí objekt alokátoru, který se používá k vytvoření mapy. |
Nečlenské přetížené funkce
| Funkce | Popis |
|---|---|
| operátor== | Zkontroluje, zda jsou obě mapy stejné nebo ne. |
| operátor!= | Zkontroluje, zda jsou obě mapy stejné nebo ne. |
| operátor< | Zkontroluje, zda je první mapa menší než jiná nebo ne. |
| operátor<=< td> | Kontroluje, zda je první mapa menší nebo rovna jiné nebo ne. | =<>
| operátor> | Zkontroluje, zda je první mapa větší než jiná nebo ne. |
| operátor>= | Zkontroluje, zda je první mapa větší než rovna jiné nebo ne. |
| swap() | Vymění prvek dvou map. |