下面是为我的问题设置上下文的代码片段(这是C++)
enum Gender { Gender_MALE, Gender_FEMALE, Gender_UNKNOWN };
enum Age { Age_CHILD, Age_ADULT, Age_SENIOR, Age_UNKNOWN };
struct Person {
int id;
Gender gender;
Age age;
};
std::list<Person> people;填充人员列表后,我希望获得列表中有多少项属于特定性别或年龄的计数。我知道我可以简单地迭代列表并手动计数,但我希望在某个地方可以找到这样的算法的更好的优化版本。我读过关于boost count累加器的文章,但我不确定在这种特殊情况下是否可以使用它。
boost (或标准库)是否提供了一些我可能忽略的功能,以便根据属性的值计算列表中的项数?
发布于 2011-05-20 01:29:37
使用std::count_if和合适的谓词。例如,为了找出Person中age为Age_ADULT的C++11对象的数量,
std::count_if(
people.cbegin(),
people.cend(),
[](Person const& p){ return p.age == Age_ADULT; }
);对于C++03,
std::count_if(
people.begin(),
people.end(),
boost::bind(&Person::age, _1) == Age_ADULT
);https://stackoverflow.com/questions/6062432
复制相似问题