التكرار عبر المجموعة
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 39 من 56.
الآن بعد أن أصبح بإمكانك إضافة العناصر والتحقق منها وإزالتها من المجموعة (set)، دعنا نتعلم كيفية التكرار عبر جميع العناصر في المجموعة. توفر حلقة for المبنية على النطاق (range-based for loop) الطريقة الأكثر سلاسة للوصول إلى كل عنصر.
إليك كيفية التكرار عبر مجموعة (set):
std::set<std::string> fruits = {"banana", "apple", "cherry"};
for (const std::string& fruit : fruits) {
std::cout << fruit << std::endl;
}أهم ميزة يجب تذكرها هي أن المجموعات (sets) تحافظ تلقائيًا على ترتيب فرزها. عندما تمر عبر مجموعة fruits أعلاه، سيكون الناتج "apple" و "banana" و "cherry" - وليس الترتيب الذي أدخلتها به. هذا الفرز التلقائي هو أحد المزايا الرئيسية لاستخدام std::set.
يجعل هذا التكرار المرتب المجموعات مثالية لعرض البيانات بترتيب أبجدي أو عددي دون الحاجة إلى الفرز يدوياً. وسواء كنت تعمل مع الأرقام، أو السلاسل النصية، أو الأنواع الأخرى القابلة للمقارنة، فإن المجموعة ستعرضها دائماً بتسلسلها المرتب الطبيعي.
التحدي
سهلقم بإنشاء برنامج يوضح ميزة الفرز التلقائي لـ std::set عن طريق إضافة كلمات إلى مجموعة (set) ثم المرور عليها لعرضها بترتيب أبجدي. سيختبر هذا التحدي فهمك لحلقات for المبنية على النطاق (range-based for loops) مع المجموعات وكيفية محافظة المجموعات على الترتيب المفرز.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد الكلمات المراد إضافتها إلى المجموعة - ثم
nمن السلاسل النصية (strings) التي تمثل الكلمات المراد إدراجها في المجموعة
يجب على برنامجك القيام بما يلي:
- إنشاء
std::set<std::string>فارغة - قراءة عدد الكلمات المراد إضافتها
- استخدام حلقة لقراءة كل كلمة وإدراجها في المجموعة باستخدام طريقة
.insert() - استخدام حلقة for مبنية على النطاق للمرور عبر المجموعة وطباعة كل كلمة
- بعد طباعة جميع الكلمات، عرض العدد الإجمالي للكلمات الفريدة في المجموعة
استخدم تنسيق المخرجات الدقيق التالي:
لكل كلمة في المجموعة (بالترتيب الأبجدي):
[word]ملخص في النهاية:
Total unique words: [count]استخدم حلقة for مبنية على النطاق بالصيغة for (const std::string& word : wordSet) للمرور عبر جميع العناصر في المجموعة. ستقوم المجموعة تلقائيًا بتقديم الكلمات بترتيب أبجدي، مما يوضح إحدى المزايا الرئيسية لاستخدام std::set. تذكر أنه إذا تم توفير كلمات مكررة في المدخلات، فسيتم تجاهلها تلقائيًا بواسطة المجموعة، بحيث يتم عرض الكلمات الفريدة فقط.
جرّب بنفسك
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
// قراءة عدد الكلمات
int n;
cin >> n;
// إنشاء مجموعة فارغة لتخزين الكلمات
set<string> wordSet;
// TODO: اكتب كودك هنا
// قراءة n من الكلمات وإدراجها في المجموعة
// استخدم حلقة for المبنية على النطاق للمرور عبر المجموعة وطباعة كل كلمة
// طباعة العدد الإجمالي للكلمات الفريدة
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector6المجموعات (عناصر فريدة)
مقدمة إلى std::setإنشاء مجموعة وإضافة عناصرالتحقق من وجود العناصرإزالة العناصرالتكرار عبر المجموعةملخص - أرقام فريدة