计算矢量中的元素属性

Counting element properties in a vector

本文关键字:元素 属性 计算      更新时间:2023-10-16

我有一个对象向量,我想计算其中有多少包含某个属性。

我确信STL可以做到这一点,但我找不到一个例子。当然,我可以使用循环来计算自己,但我需要这样做很多次,我更喜欢简洁的方法。

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

class MyObj {
public:
std::string name;
}
std::vector<MyObj> objects
int calledJohn = count(objects,this->name,"jonn")

如果您想计算有多少对象具有某个属性,std::count_if是最好的选择。std::count_if需要一个范围来迭代,以及将确定对象是否具有值的函子对象:

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

使用std::count_if

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

算法头中有一个函数std::count_if正是为您做这件事的。您必须提供一个迭代器范围(在您的情况下是objects.beginobjects.end)和一个谓词,该谓词可以是lambda函数或任何其他可调用对象:

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