Kontejnery STL
Standardní šablona knihovny (STL) obsahuje několik kontejnerů pro ukládání kolekcí souvisejících objektů.Kontejnery jsou všechny třídy šablon umožňuje určit, které objekty jsou povoleny v kontejnerech.Toto téma obsahuje přehled kontejnerů STL vám pomohou rozhodnout, které kontejneru je nejvhodnější pro vaše potřeby.
Existují dvě STL knihovny zvolit z: nativní STL a STL/CLR.Další informace o STL/CLR viz Reference knihovny STL/CLR.
Kontejnery v STL lze rozdělit do tří kategorií, sekvence kontejnery, asociativní kontejnerů a adaptéry kontejneru.Tyto kategorie a kolekce, které patří do každé kategorie jsou shrnuty zde.Podrobnější informace najdete v dokumentaci reference pro kontejnery.
Sekvence kontejnery
Kontejnery sekvence zachovat původní pořadí vložené prvky.Umožňuje určit, kam chcete vložit prvek v kontejneru.
deque Kontejner (dvoustranná fronty) umožňuje rychlé vložený a odstraněný text na začátku a konci kontejneru.Můžete také náhodně libovolný prvek rychle přistupovat.
list Kontejner umožňuje rychlé vložený a odstraněný text kdekoliv v kontejneru, ale přístup náhodně prvek v kontejneru.
vector Kontejner se chová jako pole, ale automaticky podle potřeby.
Další informace o sekvenci kontejnery naleznete v následující tabulce:
Kontejner |
Nativní STL |
STL/CLR |
---|---|---|
deque |
||
list |
||
vector |
Asociativní kontejnery
Definiční charakteristiky asociativní kontejnerů je, že prvky jsou vloženy v předdefinovaných pořadí, například seřazeny vzestupně.
Asociativní kontejnerů lze rozdělit do dvou podskupin: mapy a nastaví.A map, někdy označovány jako slovník, sestává z dvojice klíč hodnota.Klíč je používán objednání pořadí a hodnota je nějakým způsobem spojena s klíči.Například map může obsahovat klíče zastupující každý jedinečný slovo v textu a hodnoty představující počet zobrazí slovo v textu.A set je jednoduše vzestupné kontejner jedinečné prvky.
I map a set povolit pouze jednu instanci klíče nebo prvek, který má být vložen do kontejneru.Pokud více instancí prvky jsou požadovány, pomocí multimap nebo multiset.
Mapuje i nastaví u iterátorů podporu obousměrné.Další informace o u iterátorů viz Iterators.
Při oficiálně součástí standardní STL hash_map a hash_set se obvykle používají k hledání urychlit.Tyto kontejnery ukládat jejich prvky jako zatřiďovací tabulku s každou položkou tabulky obsahujících obousměrný propojeného seznamu prvků.Nejrychlejší časy hledání, zajistíte, že algoritmus hash pro vaše prvky vrátí hodnoty hash rovnoměrně.
Další informace o asociativní kontejnery naleznete v následující tabulce:
Kontejner |
Nativní STL |
STL/CLR |
---|---|---|
hash_map |
||
hash_multimap |
||
hash_multiset |
||
hash_set |
||
map |
||
multimap |
||
multiset |
||
set |
Adaptéry kontejneru
Kontejner adaptéry jsou jednoduše variace nad kontejnery.Kontejner adaptéry nepodporují u iterátorů.
priority_queue Kontejner uspořádány tak, aby prvek s nejvyšší hodnotou je vždy první ve frontě.
queue Kontejner následuje sémantiku FIFO (first in, first out).První prvek vložený (tlačné) do fronty je první odebrat (popped).
stack Kontejner následuje sémantiku LIFO (poslední in first out).Poslední prvek vložený (tlačné) v zásobníku je první prvek, který má být odebrán (popped).
Protože kontejner adaptéry nepodporují u iterátorů, nelze použít s algoritmy STL.Další informace o algoritmech viz Algoritmy.
Další informace o adaptérech kontejneru naleznete v následující tabulce:
Kontejner |
Nativní STL |
STL/CLR |
---|---|---|
priority_queue |
||
queue |
||
stack |
Požadavky pro prvky kontejneru
Prvky, které jsou vloženy do kontejneru STL může být jakýkoli typ objektu, poskytující veřejné Kopírovat konstruktor, destruktor veřejné a veřejné operátoru.Se objekt pravděpodobně nebude vyvoláním výjimky.Kromě toho asociativní kontejnery jako set a map musí být definována, operátor porovnání veřejné, což je operátor < ve výchozím nastavení.Některé operace na kontejnery mohou vyžadovat také veřejný výchozí konstruktor a provozovatele veřejných rovnocennost.
Přístup k prvky kontejneru
Prvky kontejnery jsou přístupné pomocí u iterátorů.Další informace naleznete v tématu Iterators.
[!POZNÁMKA]
Můžete také použít pro každý v k iterování kolekce STL.Další informace naleznete v tématu Jak: iteraci v kolekci STL pro každou.