我有一个问题,要求我计算使用std::count()或std::find()的数组中实例的数量。我知道如何使用标准数据(请参见下面的代码)类型来执行此操作,但是不使用我正在使用的NameContainer来执行此操作。

//Type
struct NameContainer{
char name [32];
}

//An array of containers
NameContainer *_storedNames = new NameContainer[_numberOfNames];

//An example of what I'm trying to do with a string rather than the NameContainer
std::vector<string> v(_storedNames, _storedNames + _numberOfNames);
//returns an numeric value
return std::count(v.begin(), v.end(), nameToSearch))

最佳答案

您可以使用函子

struct names_equal {
    string comp_to;

    names_equal(string a) : comp_to(a) {}

    bool operator()(NameContainer& p) {
        return p.name == comp_to;
    }
};

数像
cout << std::count_if(v.begin(), v.end(), names_equal(nameToSearch));

这样nameToSearch不必进行硬编码。

编辑

如果您不能使用count_if,而必须使用count,则修改NameContainer并为其重载==。
struct NameContainer{
    string name;

    bool operator==(string str) {
        return name == str;
    }
};

然后像这样数
cout << std::count(v.begin(), v.end(), nameToSearch);

10-01 22:48