C++ Sets

در C++، Set یکی از ساختارهای داده‌ای STL است که مجموعه‌ای از عناصر یکتا (Unique) و مرتب را ذخیره می‌کند.
Set برای زمانی مفید است که بخواهیم داده‌ها بدون تکرار و به صورت مرتب نگهداری شوند و عملیات جستجو، حذف و درج سریع باشد.

🔹 1️⃣ ایجاد Set

#include <iostream> #include <set> using namespace std; int main() { set<int> s; // مجموعه خالی set<int> s2 = {5, 1, 3, 3}; // با مقداردهی اولیه، عناصر تکراری حذف می‌شوند for(int x : s2) cout << x << " "; // خروجی: 1 3 5 return 0; }

توجه: Set به صورت خودکار مرتب (Ascending) است و عناصر تکراری را قبول نمی‌کند.

🔹 2️⃣ اضافه کردن عناصر

s.insert(10); s.insert(5); s.insert(20); for(int x : s) cout << x << " "; // خروجی: 5 10 20
  • ()insert → اضافه کردن عنصر

  • اگر عنصر تکراری باشد، اضافه نمی‌شود.

🔹 3️⃣ حذف عناصر

s.erase(10); // حذف عنصر 10 for(int x : s) cout << x << " "; // خروجی: 5 20
  • erase(value) → حذف یک عنصر

  • ()s.clear → حذف تمام عناصر

🔹 4️⃣ جستجو در Set

if(s.find(5) != s.end()) { cout << "Element 5 found" << endl; } else { cout << "Element not found" << endl; }
  • find(value) → اگر پیدا شود iterator برمی‌گرداند، در غیر این صورت ()s.end

  • جستجو در Set بسیار سریع است (O(log n)).

🔹 5️⃣ اندازه و وضعیت

cout << "Size: " << s.size() << endl; if(s.empty()) cout << "Set is empty" << endl;

🔹 6️⃣ Set مرتب نزولی

set<int, greater<int>> s; s.insert(10); s.insert(5); s.insert(20); for(int x : s) cout << x << " "; // خروجی: 20 10 5

🔹 7️⃣ نکات کلیدی

  • Set عناصر یکتا و مرتب را نگه می‌دارد.

  • اضافه کردن، حذف و جستجو سریع است (O(log n) با استفاده از Red-Black Tree).

  • Set مناسب حذف تکرار، جستجوی سریع و مرتب‌سازی خودکار است.

  • اگر ترتیب اهمیتی نداشته باشد و سرعت مهم باشد، می‌توان از unordered_set استفاده کرد (O(1) تقریبی).

💡 خلاصه:
Set در C++ مجموعه‌ای از عناصر یکتا و مرتب است. با توابع insert, erase, find, size, empty می‌توان عناصر را مدیریت و جستجو کرد. Set برای حذف تکرار، جستجوی سریع و مرتب‌سازی خودکار کاربرد دارد و پایه‌ای در بسیاری از الگوریتم‌ها و برنامه‌های کاربردی است.