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

حذف الأزواج

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 27 من 56.

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

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

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

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

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

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

challenge icon

التحدي

سهل

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

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

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

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

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

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

ورقة مرجعية

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

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

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

إذا لم يكن المفتاح موجوداً، فإن .erase() لا تفعل شيئاً ولا يحدث أي خطأ.

جرّب بنفسك

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

int main() {
    // قراءة عدد جهات الاتصال الأولية
    int n;
    cin >> n;
    
    // إنشاء خريطة جهات الاتصال
    map<string, string> 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: طباعة جهات الاتصال المتبقية أو "Directory is empty" إذا كان فارغاً
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow