std::set – Container lưu trữ phần tử duy nhất và tự động sắp xếp tăng dần.
Để dùng với kiểu tự định nghĩa (struct/class), cần nạp chồng toán tử < (hoặc cung cấp comparator).
Ví dụ
#include <bits/stdc++.h>
using namespace std;
struct Test {
int id;
// Nạp chồng toán tử < cho set sắp xếp theo id
bool operator<(const Test& other) const {
return id < other.id;
}
};
int main() {
set<Test> s;
s.insert({12}); s.insert({45}); s.insert({32});
s.insert({78}); s.insert({12}); // trùng lặp → bỏ qua
s.insert({8});
cout << "Cac phan tu trong set (da sap xep, unique): ";
for (auto &t : s) cout << t.id << " ";
// Kết quả: 8 12 32 45 78
return 0;
}
Các lưu ý quan trọng
- Toán tử
<phải định nghĩa thứ tự nghiêm ngặt (strict weak ordering). - Có thể dùng comparator ngoài:
set<Test, function<bool(Test,Test)>> s(cmp); - Set không cho phép trùng lặp – dùng
multisetnếu cần. - Phức độ: insert/find/erase = O(log n).
Kết quả
Cac phan tu trong set (da sap xep, unique): 8 12 32 45 78