Но есть более изящное решение с использованием возможностей C++11. Допустим у нас есть ассоциативный список типа std::unordered_map<int, MyType>.
Вот как это можно сделать:
// very clear lambda statement auto pred = [sVal](const std::pair<int, MyType>& x) { return x.second.val == sVal; }; const auto it = std::find_if(myMap.begin(), myMap.end(), pred);
Но есть один недостаток: надо явно указывать тип элемента контейнера, который мы перебираем, в лямбда-выражении. Но можно сделать так, чтобы компилятор сам определал это:
// does the same, but looks much smarter ^_^ auto pred = [sVal](const decltype(myMap.begin())::value_type& x) { return x.second.val == sVal; }; const auto it = std::find_if(myMap.begin(), myMap.end(), pred);
Получилось боле громоздко, но зато более универсально.