Ist es möglich, einen buchstäblichen Wert an ein in C ++ - unärer Prädikat lambda -Prädikat zu übergeben?

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

Frage

Angesichts des folgenden Codes, der auf einer Karte umgekehrt ist:

    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";

Ist es möglich, einen wörtlichen Wert (in diesem Fall 3) zu bestehen, anstatt ihn in einer Variablen (dh Findval) zu speichern, damit er über die Erfassungsliste zugegriffen werden kann?

Offensichtlich ist eine der Einschränkungen in diesem Fall, dass die Lambda die Rolle eines einheitlichen Prädikats füllt, so dass ich sie nicht zwischen den Klammern übergeben kann.

Vielen Dank

War es hilfreich?

Lösung

Sie können Folgendes schreiben:

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

Sie müssen es zunächst nicht erfassen.

Übrigens sollten Sie nicht annehmen std::find_if wird das Element finden. Ein besserer Weg ist, Iterator zu verwenden:

 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
 }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top