هل من الممكن تمرير قيمة حرفية إلى مسند Lambda Unary في C ++؟

StackOverflow https://stackoverflow.com/questions/19828526

سؤال

بالنظر إلى الكود التالي الذي يقوم بإجراء بحث عكسي على الخريطة:

    map<char, int> m = {{'a', 1}, {'b', 2}, {'c', 3}, {'d', 4}, {'e', 5}};

    int findVal = 3;
    Pair v = *find_if(m.begin(), m.end(), [findVal](const Pair & p) {
        return p.second == findVal;
    });
    cout << v.second << "->" << v.first << "\n";

هل من الممكن تمرير قيمة حرفية (في هذه الحالة 3) بدلاً من الاضطرار إلى تخزينها في متغير (أي FindVal) بحيث يمكن الوصول إليها عبر قائمة الالتقاط؟

من الواضح أن أحد القيود في هذه الحالة هو أن Lambda يملأ دور مسند أحادي حتى لا أستطيع تمريره بين الأقواس.

شكرًا

هل كانت مفيدة؟

المحلول

يمكنك كتابة هذا:

 Pair v = *find_if(m.begin(), m.end(), [](const Pair & p) {
    return p.second == 3;
 });

لا تحتاج إلى التقاطها لتبدأ.

راجع للشغل ، يجب ألا تفترض std::find_if سيجد العنصر. أفضل طريقة لاستخدام Iterator:

 auto it = find_if(m.begin(), m.end(), [](const Pair & p) {
              return p.second == 3;
           });
 if (it == m.end() ) { /*value not found*/ }

 else {
     Pair v = *it;
     //your code
 }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top