我有一个带有名称和编号的结构
:
struct S {
string name;
int number;
};
S
的对象存储在 vector 中。 vector 根据 name
排序。可能有超过 1 个项目具有相同的 name
。
当迭代 vector 中的项目时,我尝试使用 count_if
来检测重复项:
for(size_t i = 0; i < v.size(); ++i)
{
const S& s = v[i];
int count = count_if(v.begin(), v.end(), XXX);
// do something with count
}
在上面,我想不通XXX应该是什么。我试图创建一个谓词,但它毫无用处,因为没有什么可比较的:
bool IsEqualName(const S& s) {
return s.name == ???;
}
我找到的文档 leaves a lot to be desired .
我觉得我错过了一些非常明显的东西,但我不明白它是什么。谁能指出我的错误?
杰夫
最佳答案
可以写一个仿函数来实现这个:
struct FindName
{
FindName(const std::string& name) : name_(name) {}
bool operator()(const S& s) { return s.name == name_; }
private:
std::string name_;
};
int count = count_if(v.begin(), v.end(), FindName("noloader"));
如果您使用的是 C++11,则使用 lambda:
int count = count_if(v.begin(), v.end(),
[](const S& s){ return s.name == "noloader"; });
关于C++、count_if 和 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15400382/