首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boost.accumulators对某个属性设置为某个值的对象进行计数

使用boost.accumulators对某个属性设置为某个值的对象进行计数
EN

Stack Overflow用户
提问于 2011-05-20 01:22:39
回答 1查看 576关注 0票数 1

下面是为我的问题设置上下文的代码片段(这是C++)

代码语言:javascript
复制
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 (或标准库)是否提供了一些我可能忽略的功能,以便根据属性的值计算列表中的项数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-20 01:29:37

使用std::count_if和合适的谓词。例如,为了找出PersonageAge_ADULT的C++11对象的数量,

代码语言:javascript
复制
std::count_if(
    people.cbegin(),
    people.cend(),
    [](Person const& p){ return p.age == Age_ADULT; }
);

对于C++03,

代码语言:javascript
复制
std::count_if(
    people.begin(),
    people.end(),
    boost::bind(&Person::age, _1) == Age_ADULT
);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6062432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档