Trong quá trình học C++, người học thường xuyên gặp các bài toán yêu cầu lưu trữ dữ liệu không trùng lặp. Khi đó sẽ cần dùng đến set trong C++. Vậy set trong C++ là gì? Cú pháp như thế nào? Hãy cùng tìm hiểu chi tiết trong bài viết này của Code Dream nhé.
Set trong C++ là gì?
Set trong C++ là một container thuộc thư viện STL (Standard Template Library), dùng để lưu trữ tập hợp các phần tử không trùng nhau và tự động sắp xếp theo thứ tự tăng dần hoặc theo một quy tắc so sánh tùy biến. Đây là cấu trúc dữ liệu rất phổ biến trong lập trình thuật toán, đặc biệt khi cần xử lý các bài toán liên quan đến tập hợp, loại bỏ trùng lặp hoặc tìm kiếm nhanh.
Set hỗ trợ các thao tác tìm kiếm, thêm và xóa phần tử với độ phức tạp O(logN), giúp đảm bảo hiệu năng ổn định khi số lượng phần tử tăng lên.
Set thường được sử dụng trong các bài toán thi học sinh giỏi, tin học trẻ, lập trình thi đấu nhờ khả năng thao tác hiệu quả và cú pháp rõ ràng.

Đặc điểm của set trong C++
set trong C++ có những đặc điểm quan trọng sau:
- Không chứa phần tử trùng nhau
- Tự động sắp xếp các phần tử theo thứ tự tăng dần
- Không hỗ trợ truy cập bằng chỉ số như mảng hay vector
- Thời gian tìm kiếm, thêm, xóa phần tử là O(log n)
Chính những đặc điểm này giúp set trở thành công cụ mạnh mẽ khi làm việc với dữ liệu dạng tập hợp.
Khai báo và sử dụng set trong C++
Để sử dụng set, trước hết bạn cần khai báo thư viện:
#include <set>
set<kiểu_dữ_liệu> tên_biến;
Ví dụ:
set<int> s; // Khai báo một set chứa các số nguyên
Trong đó:
– int: Là kiểu dữ liệu của phần tử (có thể là long long, char, string, hoặc thậm chí là kiểu dữ liệu tự định nghĩa).
– s: Là tên của biến set.
Lưu ý: Các phần tử trong set sẽ tự động được sắp xếp và không bao giờ có hai phần tử trùng giá trị.
Các thao tác cơ bản với set trong C++
Thêm phần tử vào set
Thêm phần tử vào set bằng cách sử dụng hàm insert():
s.insert(5);
s.insert(10);
Nếu phần tử đã tồn tại, set sẽ không thêm lại, giúp loại bỏ trùng lặp một cách tự động.

Xóa phần tử khỏi set
Có thể xóa trực tiếp theo giá trị bằng hàm erase():
s.erase(5); // Xóa phần tử có giá trị là 5

Kiểm tra phần tử có tồn tại trong set hay không
Cách 1: Dùng hàm find()
if (s.find(10) != s.end()) {
// 10 tồn tại trong set
}
Giải thích: Nếu tìm thấy, find() trả về iterator đến phần tử đó. Nếu không thấy, nó trả về s.end().
Cách 2: Dùng hàm count()
if (s.count(10)) {
// 10 tồn tại trong set (vì count trả về 1)
}
Cách 3: Dùng hàm contains()
if (s.contains(10)) {
// Cách hiện đại và dễ đọc nhất
}
Duyệt các phần tử trong set
Vì set không hỗ trợ truy cập qua chỉ số, cách đơn giản nhất để xem các phần tử là sử dụng vòng lặp range-based for:
for (const auto &x : s) {
cout << x << ” “;
}
Khi nào nên dùng set trong C++?
Chúng ta thường sử dụng set trong các trường hợp:
- Cần loại bỏ phần tử trùng nhau
- Cần dữ liệu luôn được sắp xếp
- Cần tìm kiếm nhanh phần tử
- Giải các bài toán về tập hợp, giao – hợp – hiệu
- Các bài toán thuật toán trong thi đấu
set giúp code gọn gàng, dễ hiểu và tối ưu hơn so với việc tự xử lý bằng mảng hoặc vector.
Những lưu ý khi sử dụng set trong C++
- Không thể truy cập phần tử bằng s[i]
- unordered_set có độ phức tạp trung bình O(1) nhưng không đảm bảo thứ tự, trong khi set luôn giữ thứ tự và có hiệu năng ổn định O(log n).
- Với dữ liệu không cần sắp xếp, có thể cân nhắc unordered_set
- Hiểu rõ bản chất để chọn container phù hợp sẽ giúp tối ưu thuật toán

Học set trong C++ bài bản cùng Code Dream
Việc hiểu và sử dụng thành thạo set trong C++ không chỉ dừng lại ở việc nắm cú pháp, mà quan trọng hơn là biết áp dụng đúng trong từng dạng bài toán thuật toán. Đây cũng chính là định hướng đào tạo cốt lõi tại Code Dream – trung tâm chuyên sâu về lập trình thuật toán, luyện thi các kỳ thi học sinh giỏi, thi trường chuyên, thi đại học.
Tại Code Dream, C++ được giảng dạy theo lộ trình bài bản, bắt đầu từ các cấu trúc dữ liệu nền tảng như mảng, vector, set, map cho đến các thuật toán quan trọng thường xuyên xuất hiện trong các kỳ thi Tin học trẻ, học sinh giỏi và thi chuyên Tin.
Học viên không chỉ học “set trong C++ là gì” mà còn được rèn luyện cách tư duy để lựa chọn set đúng thời điểm, so sánh với các container khác và tối ưu độ phức tạp thuật toán.

Một điểm khác biệt lớn của Code Dream là giáo trình độc quyền, được xây dựng dựa trên hệ thống bài tập phân cấp từ dễ đến khó. Các bài học về set trong C++ luôn đi kèm ví dụ thực tế, bài toán ứng dụng và bài luyện tập chuyên sâu, giúp học viên hiểu rõ bản chất thay vì học thuộc máy móc.
Code Dream tập trung đào tạo lập trình thuật toán, lập trình C++ cơ bản và nâng cao, hướng đến mục tiêu chinh phục các kỳ thi Tin học trẻ, học sinh giỏi cấp Thành Phố – Quốc Gia, cũng như tạo nền tảng vững chắc cho việc học chuyên Tin và theo đuổi ngành Công nghệ thông tin sau này.
Trung tâm không dạy lập trình ứng dụng, mà chú trọng phát triển tư duy logic, kỹ năng phân tích và giải quyết bài toán – những yếu tố cốt lõi của lập trình thi đấu.

Với đội ngũ giáo viên có kinh nghiệm giảng dạy và huấn luyện học sinh thi đấu, Code Dream mang đến môi trường học tập nghiêm túc, có lộ trình rõ ràng và định hướng lâu dài. Nếu bạn đang tìm kiếm một nơi học C++ chuyên sâu, hiểu đúng và dùng đúng set trong C++ cũng như các cấu trúc dữ liệu quan trọng khác, Code Dream chính là lựa chọn đáng cân nhắc.
Trên đây là bài viết tổng quan về set trong C++, từ khái niệm, đặc điểm đến cách sử dụng. Hy vọng nội dung này giúp bạn hiểu rõ hơn về set và tự tin áp dụng trong học tập cũng như thi đấu lập trình.





