可以使用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