البحث عن القيم في الـ Map
جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 55 من 56.
التحدي
سهلقم بإنشاء برنامج ينفذ نظام بحث عكسي للعثور على جميع المفاتيح المرتبطة بقيمة محددة في الخريطة (map). سيختبر هذا التحدي قدرتك على الجمع بين تكرار الخريطة، ومقارنة القيم، وبناء المتجهات (vectors) للبحث عبر أزواج المفتاح والقيمة بكفاءة.
سيتم توفير المدخلات التالية:
- عدد صحيح
nيمثل عدد أزواج المفتاح والقيمة التي سيتم إضافتها إلى الخريطة - ثم
nمن أزواج المدخلات، كل منها يتكون من:- سلسلة نصية
keyتمثل المفتاح - عدد صحيح
valueيمثل القيمة
- سلسلة نصية
- عدد صحيح
targetValueيمثل القيمة المراد البحث عنها
يجب على برنامجك القيام بما يلي:
- إنشاء دالة باسم
findKeysWithValueتأخذstd::map<std::string, int>وعدداً صحيحاً كمعاملات - يجب أن تعيد الدالة
std::vector<std::string>يحتوي على جميع المفاتيح التي لها القيمة المحددة - في الدالة الرئيسية (main function)، قم بإنشاء خريطة وتعبئتها بأزواج المفتاح والقيمة المدخلة
- استدعاء الدالة
findKeysWithValueمع الخريطة والقيمة المستهدفة - طباعة عدد المفاتيح المتطابقة أولاً، ثم طباعة كل مفتاح مطابق في سطر منفصل
استخدم تنسيق المخرجات الدقيق التالي:
السطر الأول - عدد المفاتيح المتطابقة:
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
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vector