2014-02-15 4 views
0

У меня есть вектор объектов, и я хотел бы подсчитать, сколько из них содержит определенное свойство.Свойства элементов счетчика в векторе

Я уверен, что это можно сделать с помощью STL, но я не смог найти пример. Я мог бы, конечно, использовать цикл и считать себя, но мне нужно делать это много раз, и я бы предпочел лаконичный способ сделать это.

Я ищу, чтобы сделать что-то вроде псевдокода ниже

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

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

http://en.cppreference.com/w/cpp/algorithm/count – Mat

+0

Немного google действительно иногда идет длинный путь. Посмотрите на примеры в приведенной ссылке. – pmr

ответ

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"; }); 
0

Существует функция std::count_if в заголовке алгоритма, который делает именно то, что для вас. Вы должны обеспечить диапазон итератора (так в вашем случае objects.begin и objects.end) и предикат, который может быть лямбда-функция или любой другой вызываемый объект:

auto number = std::count_if(objects.begin(), objects.end(), [](const MyObj &object){if(/*your condition*/){return true;}}); 
Смежные вопросы