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")، ستحتوي الخريطة (map) فقط على درجات Alice و Carol. إذا حاولت مسح مفتاح غير موجود في الخريطة، فلن تقوم العملية بأي شيء - ولن يحدث أي خطأ.

عند التكرار عبر خريطة (map) باستخدام حلقة for القائمة على النطاق (range-based for loop)، يكون كل عنصر عبارة عن 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 من أزواج المدخلات:
    • سلسلة نصية (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) عبر الخريطة (الترتيب الأبجدي حسب اسم جهة الاتصال). استخدم "range-based for loop" للتكرار عبر الخريطة في المرتين، مع الوصول إلى كل زوج (مفتاح وقيمة) باستخدام pair.first لاسم جهة الاتصال و pair.second لرقم الهاتف. تذكر أن محاولة مسح جهة اتصال غير موجودة لن تسبب خطأً - ستظل الخريطة ببساطة دون تغيير.

جرّب بنفسك

#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