C++、count_if 和 equals

标签 c++ algorithm class countif

我有一个带有名称和编号的结构:

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/

相关文章:

c++ - 需要帮助优化绘图代码...

algorithm - 次线性但简单的动态凸包算法?

PHP:如何为集合制作包装器,每次我调用它时都会返回集合的下一个元素

python - Python 中的引用和值传递

php - php 中子类构造函数如何与父类构造函数交互?

java - 从另一个类调用一个类而无需更改类类型(或返回)Java

c++ - 使用 sed 将文本文件转换为 C 字符串

c++ - Csinglelock有什么用?

需要 C# make 方法

c++ - StretchBlt 收缩损坏