Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

حذف الأزواج

جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 27 من 56.

أحيانًا تحتاج إلى إزالة أزواج المفتاح والقيمة من map عندما لا تعود مطلوبة. توفّر الطريقة .erase() أسلوبًا مباشرًا لحذف العناصر من خلال تحديد المفتاح الذي تريد إزالته.

لإزالة عنصر من map، ما عليك سوى استدعاء .erase() مع المفتاح كوسيط:

std::map<std::string, int> scores;
scores["Alice"] = 95;
scores["Bob"] = 87;
scores["Carol"] = 92;

scores.erase("Bob"); // يزيل إدخال Bob بالكامل

بعد استدعاء erase("Bob")، ستحتوي الخريطة على درجات Alice وCarol فقط. إذا حاولت محو مفتاح غير موجود في الخريطة، فلن تُجري العملية أي شيء ببساطة - ولن يحدث أي خطأ.

عند التكرار على map باستخدام حلقة for قائمة على النطاق، يكون كل عنصر عبارة عن std::pair يحتوي على المفتاح والقيمة. يمكنك الوصول إلى المفتاح باستخدام .first وإلى القيمة باستخدام .second:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

سيطبع هذا كل اسم ونتيجة بالترتيب الأبجدي، لأن std::map يحافظ على ترتيب مفاتيحه تلقائيًا.

تُعدّ هذه الطريقة مفيدة بشكل خاص للحفاظ على هياكل بيانات نظيفة، وإزالة المعلومات القديمة، أو تنفيذ ميزات تتيح للمستخدمين حذف الإدخالات من تطبيقك.

challenge icon

التحدي

سهل

أنشئ برنامجًا يدير دليل جهات اتصال باستخدام std::map. سيخزّن برنامجك أسماء جهات الاتصال وأرقام الهاتف، ثم يتيح للمستخدمين إزالة جهات اتصال محددة من الدليل باستخدام طريقة .erase().

سيتم توفير المدخلات التالية:

  • عدد صحيح n يمثّل عدد جهات الاتصال الأولية
  • ثم n من أزواج المدخلات:
    • سلسلة نصية تمثّل اسم جهة الاتصال
    • سلسلة نصية تمثّل رقم الهاتف
  • عدد صحيح m يمثّل عدد جهات الاتصال المطلوب إزالتها
  • ثم m من السلاسل النصية التي تمثّل أسماء جهات الاتصال المطلوب إزالتها

ينبغي أن يقوم برنامجك بما يلي:

  1. إنشاء std::map<std::string, std::string> باسم contacts
  2. قراءة عدد جهات الاتصال الأولية وملء map بأسماء جهات الاتصال وأرقام الهاتف
  3. طباعة دليل جهات الاتصال الأولي بالتنسيق الموضح أدناه
  4. قراءة عدد جهات الاتصال المطلوب إزالتها
  5. لكل اسم جهة اتصال مطلوب إزالته، استخدام طريقة .erase() لإزالته من map
  6. طباعة دليل جهات الاتصال المحدّث بعد إتمام جميع عمليات الإزالة

استخدم تنسيق الإخراج الدقيق التالي:

الدليل الأولي:

Initial Contact Directory:
[contact1]: [phone1]
[contact2]: [phone2]
[contact3]: [phone3]
...

الدليل المحدّث بعد عمليات الإزالة:

Updated Contact Directory:
[remaining_contact1]: [phone1]
[remaining_contact2]: [phone2]
...

إذا أصبح الدليل فارغًا بعد إتمام جميع عمليات الإزالة، فاطبع:

Updated Contact Directory:
Directory is empty

يجب طباعة جهات الاتصال بالترتيب الذي تظهر به عند التكرار عبر map (ترتيب أبجدي حسب اسم جهة الاتصال). استخدم range-based for loop للتكرار عبر map في المرتين، مع الوصول إلى كل زوج من المفتاح والقيمة باستخدام pair.first لاسم جهة الاتصال وpair.second لرقم الهاتف. تذكّر أن محاولة إزالة جهة اتصال غير موجودة لن تتسبب في حدوث خطأ - ستظل map دون تغيير ببساطة.

جرّب بنفسك

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // Read number of initial contacts
    int n;
    cin >> n;
    
    // أنشئ خريطة جهات الاتصال
    map<string, string> contacts;
    
    // Read initial contacts
    for (int i = 0; i < n; i++) {
        string name, phone;
        cin >> name >> phone;
        // TODO: أضف جهة الاتصال إلى الخريطة
    }
    
    // اطبع الدليل الأولي
    cout << "Initial Contact Directory:" << endl;
    // TODO: اطبع جميع جهات الاتصال باستخدام حلقة for المعتمدة على النطاق
    
    // اقرأ عدد جهات الاتصال المراد إزالتها
    int m;
    cin >> m;
    
    // أزل جهات الاتصال
    for (int i = 0; i < m; i++) {
        string nameToRemove;
        cin >> nameToRemove;
        // TODO: أزل جهة الاتصال باستخدام الطريقة .erase()
    }
    
    // اطبع الدليل المحدّث
    cout << "Updated Contact Directory:" << endl;
    // TODO: Print remaining contacts or "Directory is empty" if empty
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم C++ عبر الإنترنت