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

البحث عن القيم في الـ Map

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

challenge icon

التحدي

سهل

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

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

  • عدد صحيح n يمثل عدد أزواج المفتاح والقيمة التي سيتم إضافتها إلى الخريطة
  • ثم n من أزواج المدخلات، كل منها يتكون من:
    • سلسلة نصية key تمثل المفتاح
    • عدد صحيح value يمثل القيمة
  • عدد صحيح targetValue يمثل القيمة المراد البحث عنها

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

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

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

السطر الأول - عدد المفاتيح المتطابقة:

Keys found: [number_of_matching_keys]

ثم كل مفتاح مطابق في أسطر منفصلة:

[matching_key_1]
[matching_key_2]
...

إذا لم تكن هناك مفاتيح تحتوي على القيمة المستهدفة، اطبع فقط:

Keys found: 0

تذكر أن دالة findKeysWithValue يجب أن تنشئ متجهاً (vector) فارغاً جديداً، وتكرر عبر الخريطة باستخدام حلقة for المبنية على النطاق (range-based for loop)، وتستخدم جملة if للتحقق من قيمة كل زوج مقابل القيمة المستهدفة. عند العثور على تطابق، أضف المفتاح (الذي يتم الوصول إليه عبر pair.first) إلى متجه النتيجة باستخدام push_back(). يجب أن تعيد الدالة المتجه الذي يحتوي على جميع المفاتيح المتطابقة.

جرّب بنفسك

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

// TODO: اكتب دالة findKeysWithValue الخاصة بك هنا

int main() {
    // قراءة عدد أزواج المفتاح والقيمة
    int n;
    cin >> n;
    
    // إنشاء خريطة (map) لتخزين أزواج المفتاح والقيمة
    map<string, int> keyValueMap;
    
    // قراءة n من أزواج المفتاح والقيمة
    for (int i = 0; i < n; i++) {
        string key;
        int value;
        cin >> key >> value;
        keyValueMap[key] = value;
    }
    
    // قراءة القيمة المستهدفة للبحث عنها
    int targetValue;
    cin >> targetValue;
    
    // TODO: استدعِ دالة findKeysWithValue الخاصة بك وقم بتخزين النتيجة
    
    // TODO: اطبع النتائج بالتنسيق المطلوب
    // أولاً اطبع "Keys found: [count]"
    // ثم اطبع كل مفتاح مطابق في أسطر منفصلة
    
    return 0;
}

جميع دروس Logic & Flow