您可以使用count_if 并提供一个谓词(一元函数,它接受范围内的元素作为参数,并返回一个可转换为布尔值的值)
例如
bool myPred(NameContainer n){
return (strcmp(n.name, "name") == 0); }
std::vector<NameContainer> v(_storedNames, _storedNames + _numberOfNames);
int i=std::count_if(v.begin(), v.end(), myPred))
您可以使用strcmp() 来比较字符数组。
如果只使用std::count 或std::find:
count 和 find 都采用与容器类型相同的类型参数进行比较,在您的情况下为 NameContainer。 std::count 将执行以下操作来比较搜索到的值:
if (*first == val)
这意味着你必须重载operator==,将你的类作为参数。
inline bool operator == (const NameContainer &first,const NameContainer &second){
return (strcmp(first.name,second.name)==0);
}
然后拨打std::count(v.begin(), v.end(), myObjectPredicate))
myObjectPredicate 是您的 NameContainer 类对象,其名称将在向量中搜索。
所以这是可行的解决方案。你可以在细节上改进它:
struct NameContainer{
char name [32];
};
inline bool operator== (const NameContainer &first,const NameContainer &second){
return (strcmp(first.name,second.name)==0);
}
int main(int argc, char** argv) {
NameContainer* _storedNames = new NameContainer[1];
std::vector<NameContainer> vn(_storedNames, _storedNames + 1);
const char* cc="piotr";
NameContainer nc;
memcpy(nc.name,cc,strlen(cc)+1);
vn.push_back(nc);
NameContainer myObjectPredicate;
memcpy(myObjectPredicate.name,cc,strlen(cc)+1);
int count=std::count(vn.begin(), vn.end(), myObjectPredicate);
std::cout<<count;
return 2400;
}
输出:
1