我有一个对象向量,我想计算其中有多少个对象的字段等于特定值。
我可以使用循环并对这些元素进行计数,但我需要多次执行此操作,并且我更喜欢一种简洁的方法。
我想做类似下面的伪代码的事情
class MyObj {
public:
std::string name;
}
std::vector<MyObj> objects
int calledJohn = count(objects,this->name,"john") // <- like this
如果您想计算有多少对象具有某种属性,
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.begin
和 objects.end
)和一个谓词,可以是 lambda 函数或任何其他可调用对象:
auto number = std::count_if(objects.begin(), objects.end(), [](const MyObj &object){if(/*your condition*/){return true;}});
std::ranges::count
:
const auto calledJohn = std::ranges::count(objects, "jonn", &MyObj::name);