例如,您可以使用count_if
并提供谓词(接受范围内的元素作为参数并返回可转换为 bool 的值的一元函数)
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
or 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