Самое простое решение - использовать лямбду:
std::unordered_map<std::string, bool> str_bool_map =
{{"a", true}, {"b", false}, {"c", true}};
bool f = std::any_of(str_bool_map.begin(), str_bool_map.end(),
[](const auto& p) { return !p.second; });
Здесь лямбда-выражение [](...) { ... }
- это унарный предикат, который принимает const auto& p
и выполняет тест. const auto&
будет выведено в const std::pair<const std::string, bool>&
(= std::unordered_map<...>::value_type
), поэтому вы используете .second
для проверки bool
части пары. Используйте элемент .first
для проверки ключа элемента.