unordered_set
عناصر فريدة قائمة على التجزئة
unordered_set درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
ما هي unordered_set؟
تخزن std::unordered_set عناصر فريدة في جدول تجزئة. وتتم اختبارات العضوية بوقت ثابت في المتوسط، لكن لا يوجد ترتيب مرتب.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s{1, 2, 3, 2, 1};
std::cout << s.size() << " unique values\n";
return 0;
}set مقابل unordered_set
كما في map:
set: مرتبة، وعملياتها بتعقيد O(log n).unordered_set: غير مرتبة، وعملياتها بتعقيد O(1) في المتوسط.
اختر unordered_set لإجراء أسرع اختبارات العضوية.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<std::string> seen{"a", "b", "c"};
std::cout << (seen.count("b") ? "yes" : "no") << '\n';
return 0;
}إدراج القيم
تضيف insert() عنصراً، وتتجاهله إذا كان موجوداً مسبقاً، وتعيد زوجاً يخبرك العنصر .second فيه بما إذا تمت الإضافة.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s;
auto a = s.insert(5);
auto b = s.insert(5);
std::cout << std::boolalpha << a.second << ' ' << b.second << '\n';
return 0;
}اختبارات العضوية السريعة
يُعد التحقق من أنك رأيت قيمة من قبل حالة الاستخدام الكلاسيكية. تعيد count() القيمة 0 أو 1.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<std::string> blocked{"spam", "junk"};
std::cout << blocked.count("spam") << '\n';
std::cout << blocked.count("ok") << '\n';
return 0;
}حذف العناصر
تزيل erase() قيمة، وتعيد عدد القيم المحذوفة، وهو 0 أو 1.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s{1, 2, 3};
s.erase(2);
std::cout << "count 2: " << s.count(2) << '\n';
std::cout << "size: " << s.size() << '\n';
return 0;
}اكتشاف التكرارات
يمكنك اكتشاف أول عنصر مكرر في تدفق من خلال إدراجه والتحقق من النتيجة المنطقية.
#include <iostream>
#include <unordered_set>
int main() {
int data[] = {3, 7, 1, 7, 9};
std::unordered_set<int> seen;
for (int x : data) {
if (!seen.insert(x).second) {
std::cout << "first duplicate: " << x << '\n';
break;
}
}
return 0;
}التكرار
يعمل التكرار، لكن الترتيب غير محدد. اجمع العناصر أو عالجها من دون افتراض أي تسلسل معين.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s{10, 20, 30};
int total = 0;
for (int x : s) total += x;
std::cout << "sum = " << total << '\n';
return 0;
}إزالة التكرارات من نطاق
أنشئ unordered_set من نطاق لإزالة التكرارات بسرعة، مع العلم أن الترتيب لا يُحفظ.
#include <iostream>
#include <unordered_set>
#include <vector>
int main() {
std::vector<int> v{1, 2, 2, 3, 3, 3};
std::unordered_set<int> u(v.begin(), v.end());
std::cout << u.size() << " unique\n";
return 0;
}find مقابل count
تمنحك find() مكرراً إلى العنصر كي تتمكن من استخدامه لاحقاً، بينما تُبلغ count() عن وجوده فقط.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<std::string> s{"alpha", "beta"};
auto it = s.find("beta");
std::cout << (it != s.end() ? *it : "none") << '\n';
return 0;
}التفريغ والتحقق من الفراغ
تزيل clear() جميع العناصر، وتتحقق empty() من عدم وجود أي عنصر.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> s{1, 2, 3};
s.clear();
std::cout << std::boolalpha << s.empty() << '\n';
return 0;
}تقاطع المجموعات
للعثور على العناصر المشتركة، تكرّر على إحدى المجموعتين وتتحقق من العضوية في المجموعة الأخرى.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> a{1, 2, 3, 4};
std::unordered_set<int> b{3, 4, 5};
for (int x : a) if (b.count(x)) std::cout << x << ' ';
std::cout << '\n';
return 0;
}تحقق سريع
اختبر مدى فهمك لـ unordered_set.
مراجعة
تعلمت أن std::unordered_set:
- تخزن عناصر فريدة مع تنفيذ العمليات بوقت O(1) في المتوسط
- لا تملك ترتيباً مضموناً
- مثالية لاختبارات العضوية السريعة واكتشاف التكرارات
بعد ذلك، ستتعلم كيفية تجزئة الأنواع المخصصة الخاصة بك.
الأسئلة الشائعة
هل درس «unordered_set» مجاني؟
نعم — نص درس «unordered_set» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «unordered_set»؟
عناصر فريدة قائمة على التجزئة تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «unordered_set»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.