计算向量中的元素属性

时间:2014-02-15 15:19:00

标签: c++ vector stl

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

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

我正在寻找类似下面的伪代码

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

std::vector<MyObj> objects
int calledJohn = count(objects,this->name,"jonn")

3 个答案:

答案 0 :(得分:3)

使用std::count_if

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.beginobjects.end)以及可以是lambda函数或任何其他可调用对象的谓词:

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