문제

지도에서 역방향 조회를 수행하는 다음 코드가 주어지면

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

캡처 목록을 통해 액세스 할 수 있도록 변수 (예 : FindVal)에 저장하지 않고 문자 그대로 값 (이 경우 3)을 전달할 수 있습니까?

분명히이 경우의 제약 중 하나는 람다가 괄호 사이에 전달할 수 없도록 단지 술어의 역할을 채우고 있다는 것입니다.

감사

도움이 되었습니까?

해결책

당신은 이것을 쓸 수 있습니다 :

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

처음부터 캡처 할 필요가 없습니다.

BTW, 당신은 가정해서는 안됩니다 std::find_if 요소를 찾을 것입니다. 더 좋은 방법은 반복자를 사용하는 것입니다.

 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