计算字段等于特定值的对象

问题描述 投票:0回答:4

我有一个对象向量,我想计算其中有多少个对象的字段等于特定值。

我可以使用循环并对这些元素进行计数,但我需要多次执行此操作,并且我更喜欢一种简洁的方法。

我想做类似下面的伪代码的事情

class MyObj {
public:
    std::string name;
}

std::vector<MyObj> objects

int calledJohn = count(objects,this->name,"john") // <- like this
c++ stl stdvector
4个回答
4
投票

如果您想计算有多少对象具有某种属性,

std::count_if
就是最佳选择。
std::count_if
采用要迭代的范围和函子对象来确定该对象是否具有值:

auto calledJohn = std::count_if(std::begin(objects), std::end(objects),
                           [] (const MyObj& obj) { return obj.name == "John"; });

4
投票

使用

std::count_if

auto n = std::count_if(objects.begin(), objects.end(),
                       [](const MyObj& o) { return o.name == "jonn";});

1
投票

算法标头中有一个函数

std::count_if
可以为您完成此任务。您必须提供一个迭代器范围(因此在您的情况下为
objects.begin
objects.end
)和一个谓词,可以是 lambda 函数或任何其他可调用对象:

auto number = std::count_if(objects.begin(), objects.end(), [](const MyObj &object){if(/*your condition*/){return true;}});

0
投票

从 C++20 开始,范围版本带有

std::ranges::count
:

const auto calledJohn = std::ranges::count(objects, "jonn", &MyObj::name);

演示

© www.soinside.com 2019 - 2024. All rights reserved.