وظيفة C++ Unordered_Map::Find()

Wzyft C Unordered Map Find



تشتهر لغة C++ بمكتبة القوالب القياسية (STL) القوية والمتعددة الاستخدامات، مما يوفر للمطورين مجموعة واسعة من الحاويات والمكررات والخوارزميات والوظائف الجاهزة للاستخدام وعالية الكفاءة. ومن بين هذه الميزات، تبرز 'unordered_map' باعتبارها لاعبًا رئيسيًا في التخزين الفعال لقيمة المفتاح والوصول عالي السرعة، مما يجعلها اختيارًا ممتازًا للتطبيقات التي يكون فيها الاسترجاع السريع أمرًا بالغ الأهمية. في قلب هذه 'unordered_map'، تعد وظيفة unordered_map::find() أداة حيوية. تم تحسين بنية البيانات هذه للوصول عالي السرعة وتخزين القيمة الأساسية. تقدم هذه المقالة فحصًا شاملاً للدالة unordered_map::find() من خلال الكشف عن تركيبها ومعلماتها بمساعدة الأمثلة التوضيحية.

فهم Unordered_Map::Find()

تم تصميم الدالة unordered_map::find() لتحديد موقع العنصر المرتبط بمفتاح محدد ضمن 'unordered_map'. يختلف إعلانه بناءً على ما إذا كان الكائن مؤهلاً بشكل ثابت أم لا، مما يوفر المرونة في استخدامه.

العثور على مكرر ( مقدار ثابت نوع المفتاح & ك ) ;

يتم استخدام هذا عندما تكون 'unordered_map' غير مؤهلة بشكل ثابت. يُرجع هذا الرمز مُكرِّرًا يشير إلى العنصر الذي تم العثور عليه.







العثور على const_iterator ( مقدار ثابت نوع المفتاح & ك ) مقدار ثابت ;

ينطبق هذا الإصدار عندما تكون 'unordered_map' مؤهلة بشكل ثابت. تقوم بإرجاع مكرر ثابت بسلوك مشابه للإصدار غير الثابت.



حدود:



ويتطلب الأمر معلمة واحدة، 'k'، وهي المفتاح الذي سيتم البحث عنه داخل 'unordered_map'.





قيمة الإرجاع:

تعتمد القيمة المرجعة على تأهيل كائن 'unordered_map'.

تقوم الطريقة بإرجاع مكرر غير ثابت إذا لم يكن الكائن مؤهلاً باستمرار.



إذا كان الكائن مؤهلًا بشكل ثابت، فستُرجع الطريقة مُكرِّرًا ثابتًا.

تعقيد الوقت:

يعد التعقيد الزمني لـ std::unordered_map::find() أمرًا بالغ الأهمية لفهم كفاءته:

في الحالة المتوسطة، يكون التعقيد الزمني ثابتًا (O(1))، مما يجعله عالي الكفاءة لحالات الاستخدام النموذجية.

في أسوأ السيناريوهات، يصبح التعقيد الزمني خطيًا (O(n)). ومع ذلك، فإن هذا السيناريو نادر في الممارسة العملية.

مثال 1:

دعنا نستكشف مثالًا عمليًا لتوضيح استخدام وفوائد unordered_map::find(). في هذا المثال، يتم إنشاء 'unordered_map' باستخدام الأحرف كمفاتيح والأعداد الصحيحة المقابلة كقيم. تحدد الدالة find() العنصر المرتبط بمفتاح 'p'. يرتبط مكرِّر 'ittr' بالعنصر الذي تم العثور عليه وتتم طباعة بياناته على وحدة التحكم. انظر الكود التالي:

#تشمل

#تشمل <خريطة_غير مرتبة>

استخدام اسم للمحطة ;

كثافة العمليات رئيسي ( فارغ ) {

unordered_map < شار , كثافة العمليات > com.unomp = {

{ 'في' , 9 } ,

{ 'أ' , 6 } ,

{ 'ع' , 8 } ,

{ 'م' , 3 } ,

{ 'س' , 4 } } ;

آلي ittr = com.unomp. يجد ( 'ع' ) ;

cout << 'المكرر' ' << ittr->أولاً << ' ' يشير إلى = ' << ittr -> ثانية << endl ;

يعود 0 ; }

دعنا نحلل الكود للحصول على فهم واضح وأفضل له:

#تشمل

#تشمل <خريطة_غير مرتبة>

يتم تضمين ملفات الرأس الضرورية: لعمليات الإدخال/الإخراج و لاستخدام حاوية 'unordered_map'.

استخدام اسم للمحطة ;

تعمل مساحة الاسم 'std' على تبسيط الكود. يتيح لك استخدام العناصر من مكتبة C++ القياسية دون إضافة البادئة إليها بـ 'std::'.

خريطة غير مرتبة < شار , كثافة العمليات > com.unomp = { { 'في' , 9 } , { 'أ' , 6 } , { 'ع' , 8 } , { 'م' , 3 } , { 'س' , 4 } } ;

يتم إنشاء 'خريطة غير مرتبة' تسمى 'um' باستخدام الأحرف ('w'، 'a'، 'p'، 'm'، 's') كمفاتيح والأعداد الصحيحة المقابلة (9، 6، 8، 3، 4 ) كقيم.

آلي ittr = com.unomp. يجد ( 'ع' ) ;

تُستخدم الدالة find() للبحث عن العنصر باستخدام المفتاح 'p' في 'unordered_map' وهو 'unomp'. يشير المكرر 'ittr' إلى العنصر المحدد.

cout << 'المكرر' ' << ittr->أولاً << ' ' يشير إلى = ' << ittr -> ثانية << endl ;

تتم طباعة المحتوى الذي يشير إليه المكرر على وحدة التحكم. يقوم بطباعة المفتاح ('p') والقيمة المرتبطة به (8) في هذه الحالة.

يعود 0 ;

ينتهي البرنامج ويعود 0 للإشارة إلى نجاح التنفيذ.

يتم تقديم إخراج الكود في ما يلي للرجوع إليه:

يعد هذا الرمز مثالًا بسيطًا لاستخدام unordered_map::find() للبحث بكفاءة عن العناصر والوصول إليها داخل 'unordered_map'. يوفر المكرر طريقة ملائمة للوصول إلى كل من المفتاح والقيمة المرتبطة بالعنصر الذي تم العثور عليه.

مثال 2:

فيما يلي مثال بسيط آخر للوظيفة unordered_map::find(). يوضح هذا الرمز استخدام 'unordered_map' لتخزين القيم المنطقية المرتبطة بمفاتيح الأعداد الصحيحة ثم يستخدم وظيفة find() للتحقق من وجود مفاتيح محددة. دعونا نرى الكود التالي ثم نفهم كيف يعمل:

#تتضمن

استخدام اسم للمحطة ;

كثافة العمليات رئيسي ( ) {

unordered_map < كثافة العمليات , منطقي > com.unomp ;

com.unomp [ 2 ] = حقيقي ;

com.unomp [ 67 ] = خطأ شنيع ;

com.unomp [ أربعة خمسة ] = حقيقي ;

com.unomp [ 98 ] = خطأ شنيع ;

لو ( com.unomp. يجد ( 67 ) == com.unomp. نهاية ( ) )

cout << 'لم يتم العثور على العنصر' << endl ;

آخر

cout << 'تم العثور على العنصر' << endl ;

لو ( com.unomp. يجد ( 42 ) == com.unomp. نهاية ( ) )

cout << 'لم يتم العثور على العنصر' << endl ;

آخر

cout << 'تم العثور على العنصر' << endl ;

يعود 0 ;

}

فيما يلي وصف تفصيلي للكود:

#تتضمن

يتضمن هذا السطر ملف رأس يغطي معظم مكتبات C++ القياسية التي تُستخدم غالبًا في البرمجة التنافسية. ومع ذلك، في التطوير العادي لـ C++، يوصى بتضمين الرؤوس المحددة.

unordered_map < كثافة العمليات , منطقي > com.unomp ;

يتم إنشاء 'unordered_map' المسمى 'unomp' باستخدام مفاتيح الأعداد الصحيحة والقيم المنطقية.

com.unomp [ 2 ] = حقيقي ;

com.unomp [ 67 ] = خطأ شنيع ;

com.unomp [ أربعة خمسة ] = حقيقي ;

com.unomp [ 98 ] = خطأ شنيع ;

يتم إدراج أزواج القيمة الرئيسية في 'خريطة_غير مرتبة'. يرتبط كل مفتاح (عدد صحيح) بقيمة منطقية.

لو ( com.unomp. يجد ( 67 ) == com.unomp. نهاية ( ) )

cout << 'لم يتم العثور على العنصر' << endl ;

آخر

cout << 'تم العثور على العنصر' << endl ;

يتم استخدام وظيفة البحث () ضمن شرط if-else للبحث عن مفاتيح محددة (67 و 42) ضمن 'unordered_map'. إذا تم العثور على المفتاح، تتم طباعة 'تم العثور على العنصر'. وبخلاف ذلك، تتم طباعة 'لم يتم العثور على العنصر'. انظر الإخراج التالي:

يعرض هذا الرمز الاستخدام الأساسي لـ 'unordered_map' ووظيفة find() لتحديد وجود أو عدم وجود مفاتيح محددة في الخريطة.

مثال 3:

دعونا نستكشف مثالاً آخر يوضح العثور على قيمة من خلال توفير مدخلات في وقت التشغيل. يستخدم هذا البرنامج البسيط 'خريطة غير مرتبة' لتخزين الأسماء (كمفاتيح) والقيم الرقمية المرتبطة بها (في هذه الحالة، تمثل بعض السمات). ثم يطالب المستخدم بإدخال اسم، والبحث عن هذا الاسم في الخريطة باستخدام وظيفة find()، وطباعة القيمة المرتبطة إذا تم العثور على الاسم. الكود موضح في ما يلي للرجوع إليه:

#تشمل

#تشمل <سلسلة>

#تشمل <خريطة_غير مرتبة>

استخدام اسم للمحطة ;

كثافة العمليات رئيسي ( ) {

الأمراض المنقولة جنسيا :: unordered_map < الأمراض المنقولة جنسيا :: خيط , مزدوج > com.unomp = {

{ 'هيري' , 23 } ,

{ 'آحرون' , 7.4 } ,

{ 'كلسوم' , 1.2 } } ;

سلسلة من ;

cout << 'على من تبحث؟ ' ;

الحصول على خط ( يتناول الطعام , من ) ;

unordered_map < خيط , مزدوج >:: const_iterator fnd = com.unomp. يجد ( من ) ;

لو ( fnd == com.unomp. نهاية ( ) )

cout << 'غير معثور عليه' ;

آخر

cout << endl << fnd -> أولاً << ' يكون ' << fnd -> ثانية << endl ;

يعود 0 ;

}

فيما يلي تفاصيل الكود لفهمك:

unordered_map < خيط , مزدوج > com.unomp = { } ;

يتم إنشاء 'unordered_map' المسمى 'unomp' باستخدام مفاتيح السلسلة (الأسماء) والقيم المزدوجة.

سلسلة من ;

يُطلب من المستخدم إدخال اسم على الشاشة ويتم تخزين الإدخال في متغير السلسلة 'who'.

unordered_map < خيط , مزدوج >:: const_iterator fnd = com.unomp. يجد ( من ) ;

يتم استخدام وظيفة find () للبحث عن الاسم المُدخل في 'unordered_map'. يتم تخزين النتيجة في المكرر 'fnd'.

لو ( fnd == com.unomp. نهاية ( ) )

cout << 'غير معثور عليه' ;

آخر

cout << endl << fnd -> أولاً << ' يكون ' << fnd -> ثانية << endl ;

إذا وصل مكرر 'fnd' إلى نهاية 'unordered_map' (end())، فهذا يعني أنه لم يتم العثور على الاسم وتم طباعة 'لم يتم العثور عليه'. وبخلاف ذلك، تتم طباعة الاسم والقيمة المرتبطة به. هنا هو إخراج الكود:

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

خاتمة

توفر الدالة unordered_map::find() في لغة C++ آلية قوية لتحديد موقع العناصر بكفاءة داخل حاويات 'unordered_map'. إن متوسط ​​التعقيد الزمني الثابت يجعله خيارًا مفضلاً لعمليات البحث في السيناريوهات التي يجب فيها الوصول إلى أزواج القيمة الرئيسية بسرعة. توضح الأمثلة المقدمة استخدامه العملي، مع التركيز على بساطته وفعاليته. في الختام، فإن إتقان وظيفة unordered_map::find() يعزز قدرة مبرمج C++ على تسخير الإمكانات الكاملة لحاويات 'unordered_map'، مما يساهم في إنشاء تطبيقات محسنة وعالية الأداء.