---
# System prepended metadata

title: STL Cheatsheet

---

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