我有一个对象向量,我想计算其中有多少包含某个属性。
我很确定这可以用STL完成,但我找不到一个例子。我当然可以使用一个循环来计算自己,但我需要多次这样做,我更喜欢这样做的简洁方法。
我正在寻找类似下面的伪代码
class MyObj {
public:
std::string name;
}
std::vector<MyObj> objects
int calledJohn = count(objects,this->name,"jonn")
答案 0 :(得分:3)
auto n = std::count_if(objects.begin(), objects.end(),
[](const MyObj& o) { return o.name == "jonn";});
答案 1 :(得分:2)
如果您想要计算有多少对象具有某个属性,std::count_if
是可行的方法。 std::count_if
需要一个范围来迭代并且函数对象将确定对象是否具有值:
auto calledJohn = std::count_if(std::begin(objects), std::end(objects),
[] (const MyObj& obj) { return obj.name == "John"; });
答案 2 :(得分:0)
算法标题中有一个函数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;}});