# STL * [STL](#stl) * [vector](#vector) * [stack](#stack) * [queue](#queue) * [priority\_queue](#priority_queue) * [dequeue](#dequeue) * [set](#set) * [multiset](#multiset) * [map](#map) * [unordered\_map](#unordered_map) * [sort()](#sort) * [Jak pisać własne cmp?](#jak-pisać-własne-cmp) UWAGA! Ten cheatsheet będzie uaktualniany w miarę z zapotrzebowaniem na nowe struktury! (oznaczone przez `TBD`) ## vector Vector to taka dynamiczna tablica. Przykładowy kod z vectorem: ``` // vector z elementami typu int vector<int> liczby; liczby.push_back(0); liczby.push_back(1); liczby.push_back(-1); // liczby = {0, 1, -1} sort() ``` * `begin()` - iterator na pierwszy element wektora * `end()` - iterator na teoretyczny element, który jest po ostatnim elemencie wektora * `push_back()` - wrzucenie elementu na koniec wektora * `pop_back()` - usunięcie elementu z końca wektora * `size()` - rozmiar wektora * `clear()` - wyczyszczenie wektora * `empty()` - zwraca informację czy wektor jest pusty ## stack * `push()` - wstaw na górę stosu * `pop()` - usuń element z góry stosu * `top()` - element z góry stosu * `size()` - rozmiar stosu * `empty()` - zwraca informację czy stos jest pusty ## queue * `push()` - wstaw na koniec kolejki * `pop()` - usuń element z końca kolejki * `front()` - weź pierwszy element z kolejki * `size()` - rozmiar kolejki * `empty()`- zwraca informację czy kolejka jest pusta ## priority_queue * `TBD` ## dequeue * `TBD` ## set * `TBD` ## multiset * `TBD` ## map * `TBD` ## unordered_map * `TBD` ## sort() Tablice: * `sort(tab + L, tab + R + 1)` -> sortowanie przedziału * `sort(tab, tab + n)` -> szczególny przypadek, sortowanie całej tablicy * `sort(tab + L, tab + R + 1, cmp)` -> zawsze możemy dodać własny `cmp` Wektory: * `sort(v.begin() + L, v.begin() + R + 1)` -> sortowanie przedziału * `sort(v.begin(), v.end())` -> szczególny przypadek, sortowanie całego wektora * `sort(v.begin() + L, v.begin() + R + 1, cmp)` -> zawsze możemy dodać własny `cmp` ## Jak pisać własne cmp? `cmp` do sortowania nierosnąco ```c bool cmp(int a, int b) { return (a > b); } ``` `cmp` do sortowania, że najpierw parzyste, potem nieparzyste, a elementy danej parzystości w kolejności niemalejącej ```c bool cmp(int a, int b) { // liczby sa tej samej parzystosci -> kolejnosc niemalejaca if(a % 2 == b % 2) { return (a < b); } // liczby sa roznej parzystosci -> najpierw parzyste, potem nieparzyste // czyli albo a jest parzyste albo b jest parzyste else { return (a % 2 == 0); } } ``` UWAGA! Ważne porównywanie elementów musi być jednoznaczne, bo dziwne rzeczy mogą się wydarzyć `WA`, `TLE`, `SEGFAULT`, czyli porównanie wartości `A` i `B` musi zawsze zwracać to samo (nawet jak porównujemy w odwrotnej kolejności, czyli `B` z `A`)