C++ Const عنصر الوصول إلى خريطة العنصر




stl map (3)

إذا لم يكن العنصر موجودًا في map ، فسوف يضيفه operator [] - والذي من الواضح أنه لا يستطيع العمل في خريطة const بحيث لا يحدد C ++ إصدار const للمشغل. هذا مثال جيد لمدقق المحول البرمجي الذي يمنع خطأ وقت التشغيل المحتمل.

في حالتك ، تحتاج إلى استخدام find بدلاً من ذلك والذي سيعرض فقط عنصر (التكرار إلى) إذا كان موجودًا ، فلن يقوم أبدًا بتعديل map . في حالة عدم وجود عنصر ، فإنه يعيد مكرر إلى end() الخريطة end() .

at غير موجود ولا ينبغي حتى تجميع. ربما هذا هو "ملحق مترجم" (= حشرة جديد في C ++ 0x).

حاولت استخدام عامل التشغيل [] الوصول إلى العنصر في خريطة C ++ const ، ولكن فشلت هذه الطريقة. كما حاولت استخدام "في ()" للقيام بنفس الشيء. عملت هذا الوقت. ومع ذلك ، لم أتمكن من العثور على أي مرجع حول استخدام "at ()" للوصول إلى العنصر في خريطة C ++ const. هل "at ()" وظيفة مضافة حديثًا في خريطة C ++؟ أين يمكنني العثور على مزيد من المعلومات حول هذا؟ شكرا جزيلا!

مثال يمكن أن يكون ما يلي:

#include <iostream>
#include <map>

using namespace std;

int main()
{
        map<int, char> A;
        A[1] = 'b';
        A[3] = 'c';

        const map<int, char> B = A;

        cout << B.at(3) << endl; // it works
        cout << B[3] << endl;  // it does not work

}

لاستخدام "B [3]" ، قام بإرجاع الأخطاء التالية أثناء التحويل البرمجي:

t01.cpp: 14: error: pass 'const std :: map، std :: allocator>>' as 'this' argument of '_Tp & std :: map <_Key، _Tp، _Compare، _Alloc> :: operator [] ( const _Key &) [with _Key = int، _Tp = char، _Compare = std :: less، _Alloc = std :: allocator>] 'المؤهلة المرتجع

المترجم المستخدم هو g ++ 4.2.1


سيقوم [] -operator بإنشاء إدخال جديد في الخريطة إذا كان المفتاح المحدد غير موجود. قد تغير الخريطة.

انظر هذا الرابط .


at() هي طريقة جديدة ل std::map في C ++ 11.

بدلاً من إدراج عنصر تم إنشاؤه افتراضيًا جديدًا كعامل operator[] إذا لم يكن هناك عنصر مع المفتاح المحدد ، فإنه يؤدي إلى std::out_of_range . (وهذا مشابه لسلوك at() لـ deque و vector .)

وبسبب هذا السلوك ، من المنطقي أن يكون الحمل الزائد const at() ، بخلاف operator[] الذي لديه دائمًا القدرة على تغيير الخريطة.





const