【发布时间】:2015-04-15 10:14:06
【问题描述】:
我有一张地图:
std::map<std::string, bool> all_triggers_didfire;
我填写它,最后想获得真实值的数量。以下代码有效:
int count_did_fire = std::count_if(
all_triggers_didfire.begin(),
all_triggers_didfire.end(),
[](std::pair<std::string, bool> p){return p.second;}
);
有没有比为此定义 lambda 表达式更简单的方法?
【问题讨论】:
-
如果你有c++14,使用
[](auto p) { return p.second; }.. -
或
[](decltype(all_triggers)::value_type p) { return p.second; }。 -
lambda 对我来说似乎很好,除了它应该通过引用来获取它的参数以避免为复制字符串分配内存。 (同样适用于上面的两个 cmets)。
-
@JonathanWakely 除了它需要是
std::pair<const std::string, bool>才能真正避免复制:)
标签: c++ dictionary lambda countif