#include "utils.hpp"
#include <set>
using namespace std;
/*
set – elérhető fontos tagfüggvények (rendezett, egyedi elemek; általában RB-fa):
Konstruktorok / inicializálás:
set()
set(initializer_list<T>)
set(first, last)
Kapacitás és méret:
size()
empty()
max_size()
Iterátorok:
begin(), end()
rbegin(), rend()
cbegin(), cend()
crbegin(), crend()
Keresés / lekérdezés:
find(const T& key) // iterátort ad vagy end()
count(const T& key) // 0 vagy 1
contains(const T& key) // C++20, bool
lower_bound(const T& key) // első elem, ami nem kisebb (>= key)
upper_bound(const T& key) // első elem, ami nagyobb (> key)
equal_range(const T& key) // [lower_bound, upper_bound)
Módosító műveletek:
insert(const T& value) / insert(T&& value)
insert(first, last) / insert(init_list)
emplace(args...) // helyben konstruál
erase(pos) / erase(first, last) / erase(const T& key)
clear()
swap(other)
merge(other) // C++17: elemek átemelése másik set-ből
extract(key) / extract(pos) // C++17: csomópont kiemelése (node handle)
Megjegyzések:
- Rendezett tároló → logaritmikus műveleti költségek (O(log n)).
- Nincs indexelés, nincs operator[].
*/
void demo_set() {
set<int> halmaz = { 7, 3, 4, 4, 1, 6 };
print_container(halmaz, "Set tartalma");
// Keresés
cout << (halmaz.find(3) != halmaz.end() ? "3 benne van\n" : "3 nincs benne\n");
// Első >= 5
auto lb = halmaz.lower_bound(5);
if (lb != halmaz.end()) cout << "Első >= 5: " << *lb << "\n";
// Törlés
halmaz.erase(6);
print_container(halmaz, "6 törlése után");
}