# 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`)