Mapa v C++ Standard Template Library (STL)

Mapy jsou asociativní kontejnery které ukládají prvky zmapovaným způsobem. Každý prvek má hodnotu klíče a namapovanou hodnotu. Žádné dvě namapované hodnoty nemohou mít stejné hodnoty klíče.

std::map je šablona třídy pro mapové kontejnery a je definována uvnitř hlavičkového souboru.

Základní členské funkce std::map

Některé základní funkce spojené s std::map jsou:

  • začít() – Vrátí iterátor na první prvek na mapě.
  • konec() – Vrátí iterátor teoretického prvku, který následuje za posledním prvkem na mapě.
  • velikost() – Vrátí počet prvků na mapě.
  • max_size() – Vrátí maximální počet prvků, které mapa pojme.
  • prázdný() – Vrací, zda je mapa prázdná.
  • pair insert(keyvalue, mapvalue) – Přidá na mapu nový prvek.
  • vymazat (pozice iterátoru) – Odebere prvek v pozici, na kterou ukazuje iterátor.
  • vymazat (konst g) – Odebere z mapy pár klíč–hodnota ‚g‘.
  • Průhledná() – Odstraní všechny prvky z mapy.

Příklady std::map

Následující příklady ukazují, jak provádět základní operace na mapových kontejnerech.

Příklad 1: Funkce begin() a end().

C++




// C++ program to illustrate the begin and end iterator> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>t.t. // Vložte do mapy nějaké hodnoty mp['one'] = 1; mp['dva'] = 2; mp['tři'] = 3; // Získá iterátor ukazující na první prvek v // map mapint>::iterator it = mp.begin(); // Iterujte mapu a vytiskněte prvky while (it != mp.end()) { cout < < 'Key: ' < < ', Value: ' ++it; } return 0; }>

Výstup

Key: one, Value: 1 Key: three, Value: 3 Key: two, Value: 2 

Složitost výše uvedené metody:

Časová složitost: O(n) kde n je velikost mapy.

Pomocný prostor: Na)

Příklad 2: funkce size().

C++




// C++ program to illustrate the size() function> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>mapa; // Vložte nějaké hodnoty do mapy map['one'] = 1; mapa['dva'] = 2; mapa['tři'] = 3; // Vytiskne velikost mapy cout < < 'Size of map: ' < < map.size() < < endl; return 0; }>

Výstup

Size of map: 3 

Složitost výše uvedené metody:

Časová složitost: O(1).

Příklad 3: Implementace mapy

CPP




// CPP Program to demonstrate the implementation in Map> // divyansh mishra -->divyanshmishra101010> #include> #include> #include> using> namespace> std;> int> main()> {> > // empty map container> > map <> int> ,> int> >gquiz1;> > // insert elements in random order> > gquiz1.insert(pair <> int> ,> int> >(1, 40));> > gquiz1.insert(pair <> int> ,> int> >(2, 30));> > gquiz1.insert(pair <> int> ,> int> >(3, 60));> > gquiz1.insert(pair <> int> ,> int> >(4, 20));> > gquiz1.insert(pair <> int> ,> int> >(5, 50));> > gquiz1.insert(pair <> int> ,> int> >(6, 50));> > // another way of inserting a value in a map> > gquiz1[7] = 10;> > // printing map gquiz1> > map <> int> ,> int> >::iterator itr;> > cout < <> ' The map gquiz1 is : '> ;> > cout < <> ' KEY ELEMENT '> ;> > for> (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr) {> > cout < <> ' '> ' ' < < ' '; } cout < < endl; // assigning the elements from gquiz1 to gquiz2 map gquiz2(gquiz1.begin(), gquiz1.end()); // vytiskne všechny prvky mapy gquiz2 cout < < ' The map gquiz2 after' < < ' assign from gquiz1 is : '; cout < < ' KEY ELEMENT '; for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } cout < < endl; // remove all elements up to // element with key=3 in gquiz2 cout < < ' gquiz2 after removal of' ' elements less than key=3 : '; cout < < ' KEY ELEMENT '; gquiz2.erase(gquiz2.begin(), gquiz2.find(3)); for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } // remove all elements with key = 4 int num; num = gquiz2.erase(4); cout < < ' gquiz2.erase(4) : '; cout < < num < < ' removed '; cout < < ' KEY ELEMENT '; for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr) { cout < < ' ' ' ' < < ' '; } cout < < endl; // lower bound and upper bound for map gquiz1 key = 5 cout < < 'gquiz1.lower_bound(5) : ' < < ' KEY = '; cout ' '; cout < < ' ELEMENT = ' < < endl; cout < < 'gquiz1.upper_bound(5) : ' < < ' KEY = '; cout ' '; cout < < ' ELEMENT = ' < < endl; return 0; }>

Výstup

The map gquiz1 is : KEY ELEMENT 1 40 2 30 3 60 4 20 5 50 6 50 7 10 The map gquiz2 after assign from gquiz1 is : KEY ELEMENT 1 40 2 30 3 60 4 20 5 50 6 50 7 10 gquiz2 after remov... 

Složitost výše uvedené metody:

Časová složitost: O(n log(n)), protože n je velikost mapy
Pomocný prostor: Na)

Příklad 4: Implementace mapy celých čísel

C++




// C++ program to implement map container> #include> #include> #include> using> namespace> std;> int> main()> {> > // Create a map of strings to integers> > mapint>mapa; // Vložte nějaké hodnoty do mapy map['one'] = 1; mapa['dva'] = 2; mapa['tři'] = 3; // Vytiskne hodnoty v mapě cout < < 'Key: one, Value: ' < < map['one'] < < endl; cout < < 'Key: two, Value: ' < < map['two'] < < endl; cout < < 'Key: three, Value: ' < < map['three'] < < endl; // Check if a key is in the map if (map.count('four')>0) { cout < < 'Key 'four' is in the map' < < endl; } else { cout < < 'Key 'four' is not in the map' < < endl; } return 0; }>

Výstup

Key: one, Value: 1 Key: two, Value: 2 Key: three, Value: 3 Key 'four' is not in the map 

Seznam všech funkcí std::map

Následující tabulka obsahuje všechny funkce definované ve třídě std::map.

Funkce

Definice

mapa::insert()

Vložte prvky s konkrétním klíčem do kontejneru mapy –> O(log n)

mapa:: počet()

Vrátí počet shod prvku s párem klíč–hodnota ‚g‘ na mapě. –> O(log n)

map equal_range()

Vrátí iterátor párů. Dvojice odkazuje na hranice rozsahu, který zahrnuje všechny prvky v kontejneru, které mají klíč ekvivalentní k.

vymazání mapy ()

Používá se k vymazání prvků z kontejneru –> O(log n)

mapa rend()

Vrátí zpětný iterátor ukazující na teoretický prvek těsně před prvním párem klíč–hodnota v mapě (který je považován za jeho opačný konec).

mapa rbegin()

Vrátí zpětný iterátor, který ukazuje na poslední prvek mapy.

najít mapu ()

Vrátí iterátor prvku s párem klíč–hodnota ‚g‘ v mapě, pokud je nalezen, jinak vrátí iterátor na konec.

map crbegin() a crend()

crbegin() vrací konstantní reverzní iterátor odkazující na poslední prvek v kontejneru mapy. crend() vrací konstantní reverzní iterátor ukazující na teoretický prvek před prvním prvkem v mapě.

map cbegin() a cend()

cbegin() vrací konstantní iterátor odkazující na první prvek v kontejneru mapy. cend() vrací konstantní iterátor ukazující na teoretický prvek, který následuje za posledním prvkem v multimapě.

mapa emplace()

Vloží klíč a jeho prvek do kontejneru mapy.

mapa max_size()

Vrátí maximální počet prvků, které může kontejner mapy pojmout –> O(1)

mapa horní_mez()

Vrátí iterátor na první prvek, který je ekvivalentní namapované hodnotě s párem klíč–hodnota „g“, nebo bude určitě následovat prvek s párem klíč–hodnota „g“ v mapě.

mapový operátor=

Přiřadí obsah kontejneru jinému kontejneru a nahradí jeho aktuální obsah.

map lower_bound()

Vrátí iterátor na první prvek, který je ekvivalentní namapované hodnotě s párem klíč–hodnota ‚g‘ nebo rozhodně nebude předcházet prvku s párem klíč–hodnota ‚g‘ v mapě –> O(log n)

mapa emplace_hint()

Vloží klíč a jeho prvek do kontejneru mapy s danou nápovědou.

map value_comp()

Vrátí objekt, který určuje, jak jsou prvky v mapě uspořádány (ve výchozím nastavení „ <“.

mapa key_comp()

Vrátí objekt, který určuje, jak jsou prvky v mapě uspořádány (ve výchozím nastavení „ <“.

mapa::velikost()

Vrátí počet prvků v mapě.

mapa::prázdný()

Vrací, zda je mapa prázdná

map::begin() a end()

begin() vrací iterátor k prvnímu prvku v mapě. end() vrací iterátor teoretického prvku, který následuje za posledním prvkem v mapě

mapa::operátor[]

Tento operátor se používá k odkazování na prvek přítomný na pozici dané uvnitř operátoru.

mapa::jasný()

Odstraní všechny prvky z mapy.

map::at() a mapa::swap()

Funkce at() se používá k vrácení odkazu na prvek spojený s klíčem k. Funkce swap() se používá k výměně obsahu dvou map, ale mapy musí být stejného typu, i když velikosti se mohou lišit.