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

التحقق من وجود المفاتيح

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

بينما يعد عامل الأقواس المربعة ملائماً للوصول إلى قيم الخريطة (map)، هناك مشكلة محتملة: ماذا يحدث إذا حاولت الوصول إلى مفتاح غير موجود؟ كما تعلمت في الدرس السابق، فإن استخدام [] مع مفتاح غير موجود ينشئ ذلك المفتاح تلقائياً بقيمة افتراضية.

أحياناً قد ترغب في التحقق مما إذا كان المفتاح موجوداً قبل الوصول إليه، دون إنشاء إدخالات جديدة عن طريق الخطأ. هنا تبرز فائدة الطريقة .count()؛ فهي تخبرك ما إذا كان مفتاح معين موجوداً في الخريطة (map).

تُرجع الطريقة .count() القيمة 1 إذا كان المفتاح موجوداً و 0 إذا لم يكن موجوداً:

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

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

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

challenge icon

التحدي

سهل

قم بإنشاء برنامج يدير نظام استعارة الكتب في مكتبة باستخدام std::map. سيقوم برنامجك بتتبع الكتب المتاحة واستخدام طريقة .count() للتحقق بأمان مما إذا كانت الكتب موجودة قبل محاولة الوصول إلى معلوماتها.

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

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

يجب على برنامجك القيام بما يلي:

  1. إنشاء std::map<std::string, int> باسم library
  2. قراءة عدد الكتب وملء الخريطة (map) بعناوين الكتب وعدد نسخها المتاحة
  3. قراءة عدد طلبات الكتب
  4. لكل طلب كتاب، استخدم طريقة .count() للتحقق مما إذا كان الكتاب موجوداً في المكتبة
  5. طباعة الرسالة المناسبة بناءً على ما إذا كان الكتاب موجوداً أم لا

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

لكل طلب كتاب:

  • إذا كان الكتاب موجوداً: Book "[book title]" is available with [number] copies
  • إذا لم يكن الكتاب موجوداً: Book "[book title]" is not available in the library

استخدم طريقة .count() في جملة if للتحقق من وجود الكتاب قبل الوصول إلى قيمته. إذا أعادت library.count(bookTitle) القيمة 1، فهذا يعني أن الكتاب موجود ويمكنك الوصول بأمان إلى library[bookTitle] للحصول على عدد النسخ. أما إذا أعادت 0، فإن الكتاب غير موجود في المكتبة.

ورقة مرجعية

تتحقق الطريقة .count() مما إذا كان المفتاح موجوداً في الخريطة (map) دون إنشاء إدخالات جديدة. وهي تعيد القيمة 1 إذا كان المفتاح موجوداً و 0 إذا لم يكن موجوداً:

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

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

يمنع هذا إنشاء إدخالات غير مرغوب فيها عن طريق الخطأ عند التحقق من وجود المفتاح، على عكس استخدام عامل الأقواس المربعة [] الذي يقوم تلقائياً بإنشاء مفاتيح بقيم افتراضية.

جرّب بنفسك

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

int main() {
    // قراءة عدد الكتب
    int n;
    cin >> n;
    
    // إنشاء خريطة المكتبة
    map<string, int> library;
    
    // قراءة معلومات الكتب وتعبئة الخريطة
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // قراءة عدد طلبات الكتب
    int m;
    cin >> m;
    
    // TODO: اكتب كودك أدناه
    // معالجة كل طلب كتاب باستخدام طريقة .count()
    // تحقق مما إذا كان الكتاب موجوداً واطبع الرسالة المناسبة
    
    return 0;
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow