可以使用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
或std::find
:
计数和发现使用相同类型的参数来比较作为conatainer的类型,你的情况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;
}
输出:
他无法使用count_if! – 4pie0
我修好了。但我不明白他为什么可以使用'count'而不是'count_if' – 2013-04-02 19:05:04
非常感谢。关于明确的性质,它是一项任务的一部分,需要这两者之一。 – user2211776