set
trong C++ là một lớp trong thư viện <set>
cung cấp một cấu trúc dữ liệu để lưu trữ một tập hợp các phần tử không trùng lặp. Các phần tử trong một set
được sắp xếp theo thứ tự tự nhiên và không cho phép có các phần tử trùng lặp.
bài viết liên quan
set
sử dụng cây nhị phân tìm kiếm (BST) để lưu trữ và quản lý các phần tử, nên các phần tử trong một set được sắp xếp theo thứ tự tự nhiên.
set
cung cấp các hàm hỗ trợ như insert()
, erase()
, find()
, size()
, empty()
để thêm, xóa, tìm kiếm, lấy kích thước và kiểm tra rỗng của tập hợp.
Ví dụ về sử dụng set:
#include <iostream> #include <set> using namespace std; int main() { set<int> s; s.insert(5); s.insert(3); s.insert(7); s.insert(5); // không thêm vì 5 đã có trong set for (auto x : s) { cout << x << " "; } cout << endl; return 0; }
Kết quả: 3 5 7
Trong ví dụ trên, chúng ta tạo một đối tượng set với kiểu dữ liệu int, sau đó thêm các phần tử 5, 3, 7 vào set, vì set không cho phép trùng lặp nên phần tử 5 đã được thêm vào sẽ không được thêm vào. Cuối cùng, chúng ta dùng vòng lặp for-each để in ra tất cả các phần tử trong set.
set
cung cấp nhiều tính năng hữu ích khác nhau, chẳng hạn như:
- Tìm kiếm phần tử trong set sử dụng hàm
find()
- Xóa phần tử trong set sử dụng hàm
erase()
- Lấy kích thước của set sử dụng hàm
size()
- Kiểm tra xem set có rỗng hay không sử dụng hàm
empty()
set
là một cấu trúc dữ liệu rất hữu ích khi bạn cần quản lý một tập hợp các phần tử không trùng lặp và cần sắp xếp theo thứ tự tự nhiên.
Một số ví dụ set trong c++
Dưới đây là một số ví dụ về sử dụng set trong C++:
- Tạo một set với kiểu dữ liệu int và thêm các phần tử vào set:
set<int> s; s.insert(5); s.insert(3); s.insert(7); s.insert(2);
- Tìm kiếm phần tử trong set:
set<int>::iterator it = s.find(3); if (it != s.end()) { cout << "Phan tu 3 ton tai trong set" << endl; } else { cout << "Phan tu 3 khong ton tai trong set" << endl; }
- Xóa phần tử trong set:
s.erase(3);
- Lấy kích thước của set:
cout << "Kich thuoc cua set la: " << s.size() << endl;
- Kiểm tra xem set có rỗng hay không:
if (s.empty()) { cout << "Set rong" << endl; } else { cout << "Set khong rong" << endl; }
- Tạo một set với kiểu dữ liệu string và thêm các phần tử vào set:
set<string> myset; myset.insert("apple"); myset.insert("banana"); myset.insert("orange"); myset.insert("mango");
- Tìm kiếm phần tử trong set:
set<string>::iterator it = myset.find("banana"); if (it != myset.end()) { cout << "Phan tu banana ton tai trong set" << endl; } else { cout << "Phan tu banana khong ton tai trong set" << endl; }
- Tạo một set với kiểu dữ liệu custom class:
class Person { public: string name; int age; Person(string n, int a) : name(n), age(a) {} bool operator<(const Person& p) const { return name < p.name; } }; set<Person> people; people.insert(Person("John", 30)); people.insert(Person("Mike", 25)); people.insert(Person("Sara", 35));
Trong các ví dụ trên, chúng ta có thể thấy rằng set là một cấu trúc dữ liệu rất hữu ích để quản lý tập hợp các phần tử không trùng lặp và có thể sử dụng với nhiều kiểu dữ liệu khác nhau.