Pojemniki STL
Standardowy szablon biblioteki (STL) udostępnia kilka pojemników do przechowywania kolekcji powiązanych obiektów.Pojemniki są wszystkich klas szablonów, co pozwala określać, jakie obiekty są dozwolone w pojemnikach.Ten temat zawiera omówienie kontenerów STL, aby określić kontener, który jest najlepszy dla potrzeb.
Istnieją dwie biblioteki STL, które można wybierać: macierzysty STL i STL/CLR.Aby uzyskać więcej informacji dotyczących STL/CLR, zobacz Odwołanie do biblioteki STL/CLR..
Pojemniki w STL można podzielić na trzy kategorie, pojemniki sekwencji, asocjacyjną pojemników i kart kontenera.Te kategorie i kolekcje, które należą do każdej kategorii są sumowane w tym miejscu.Bardziej szczegółowe informacje można znaleźć w dokumentacji referencyjnej dla pojemników.
Pojemniki sekwencji
Pojemniki sekwencji zachowania oryginalnej kolejności wstawionych elementów.Pozwala określić, gdzie wstawić element w kontenerze.
deque Kontenera (dwustronna kolejki) pozwala na szybkie wstawienia i usunięcia na początku i na końcu pojemnika.Można również losowo szybki dostęp dowolnego elementu.
list Kontenera pozwala na szybkie wstawienia i usunięcia gdziekolwiek w kontenerze, ale nie może uzyskać dostępu losowo do elementu w kontenerze.
vector Kontenera, zachowuje się jak tablica, ale automatycznie zostaną powiększone stosownie do potrzeb.
Więcej informacji na pojemnikach sekwencji na ten temat można znaleźć w poniższej tabeli:
Kontener |
Macierzysty STL |
STL/CLR. |
---|---|---|
deque |
||
list |
||
vector |
Pojemniki asocjacyjne
Definiujących cecha asocjacyjną pojemników jest, że elementy będą wstawiane w wstępnie zdefiniowanej kolejności, takie jak posortowane rosnąco.
Asocjacyjną pojemniki mogą być pogrupowane w dwóch podzbiory: mapy i ustawia.A map, czasami nazywane słownika, składa się z pary klucz wartość.Ten klucz jest używany w celu sekwencji, a wartość jakoś jest skojarzony z tym kluczem.Na przykład map może zawierać kluczy reprezentujące każdy wyraz unikatowy tekst i wartości, reprezentujących liczbę razy, które pojawia się w tekście wyraz.A set jest po prostu rosnącej kontenera unikatowe elementy.
Obie map i set Zezwalaj tylko jednego wystąpienia klucza lub element ma zostać wstawiona do kontenera.Jeśli wiele wystąpień elementy są wymagane, użyć multimap lub multiset.
Zarówno mapy i ustawia Iteratory dwukierunkowy pomocy technicznej.Aby uzyskać więcej informacji dotyczących Iteratory, zobacz Iterators.
Jednocześnie nie oficjalnie część standardu STL hash_map i hash_set są często wykorzystywane do poprawy przeszukiwanie razy.Tych kontenerach ich elementy są przechowywane jako tabeli mieszania z każdego wpisu tabeli zawierające dwukierunkowy połączonej listy elementów.W celu zapewnienia najszybsze czas przeszukiwania, upewnij się, że algorytm mieszania dla elementów zwraca wartości mieszania równomiernie rozłożony.
Więcej informacji na pojemnikach asocjacyjnej na ten temat można znaleźć w poniższej tabeli:
Kontener |
Macierzysty STL |
STL/CLR. |
---|---|---|
hash_map |
||
hash_multimap |
||
hash_multiset |
||
hash_set |
||
map |
||
multimap |
||
multiset |
||
set |
Kontener kart
Karty kontenera są po prostu wahania powyżej pojemników.Karty kontenera nie obsługują Iteratory.
priority_queue Kontenera tak zorganizowane, że element o najwyższej wartości jest zawsze na pierwszym w kolejce.
queue Kontenera wynika semantykę FIFO (pierwszy ZAPISANY, pierwszy na wyjściu).Pierwszy element dodaje (pchany) do kolejki jest pierwszym pojawiały się do usunięcia (błędy).
stack Kontenera wynika semantykę LIFO (ostatni, pierwszy na wyjściu).Ostatni element ma zostać wstawiony (pchany) na stosie jest pierwszym elementem pojawiały się do usunięcia (błędy).
Ponieważ kontenera karty nie obsługują Iteratory, nie można używać z algorytmów STL.Aby uzyskać więcej informacji na algorytmach, zobacz Algorytmy.
Więcej informacji dotyczących kart kontenera można znaleźć w poniższej tabeli:
Kontener |
Macierzysty STL |
STL/CLR. |
---|---|---|
priority_queue |
||
queue |
||
stack |
Wymagania dla elementów kontenera
Elementy wstawione do kontenera STL mogą być dowolnego typu obiektu, który dostarcza konstruktora publicznego kopii, destruktor publicznych i operatora przypisania publicznych.Destruktor nie może generować wyjątek.Ponadto kontenerów asocjacyjnych, takich jak set i map musi mieć publicznego operator porównania zdefiniowane, która jest operatorem < Domyślnie.Niektóre operacje na pojemnikach również może wymagać, publicznego konstruktora domyślnego i podmiot publiczny równoważności.
Dostęp do elementów kontenera
Elementy pojemniki są dostępne przy użyciu Iteratory.Aby uzyskać więcej informacji, zobacz Iterators.
[!UWAGA]
Można również użyć dla każdego z nich w do iteracji elementów w kolekcji STL.Aby uzyskać więcej informacji, zobacz Jak: iteracyjne przeglądanie zbioru STL z dla każdego.