用C++ find_if() 写一个容器里面相等的元素
时间: 2024-10-11 10:11:57 浏览: 25
set_STL_C++_set_
在C++中,`find_if()` 函数用于在一个容器中搜索第一个满足特定条件的对象。这个函数通常配合一个谓词(predicate)一起使用,该谓词是一个返回bool类型的函数,如果元素满足条件则返回true。
例如,如果你想在`std::list<CPerson>`中查找具有特定属性的`CPerson`对象,你可以这样做[^1]:
```cpp
#include <iostream>
#include <string>
#include <list>
using namespace std;
class CPerson {
public:
// 声明"== "操作符的重载版本
bool operator==(const CPerson& rhs) const {
// 在这里编写你的比较逻辑,如姓名、年龄或其他属性的匹配
return this->name == rhs.name && this->age == rhs.age;
}
private:
string name;
int age;
};
// 谓词示例:假设我们正在寻找名字为"John"的人
bool findByName(const CPerson& target, const CPerson& elem) {
return elem.name == target.name;
}
int main() {
list<CPerson> people = { {"John", 30}, {"Jane", 25}, {"John", 40} };
auto it = find_if(people.begin(), people.end(), findByName({"John", 30}, /*遍历的元素*/));
if (it != people.end()) {
cout << "Found a person with name 'John' and age 30: " << (*it).name << endl;
} else {
cout << "No such person found." << endl;
}
system("pause");
return 0;
}
```
在这个例子中,`find_if()`会遍历`people`列表,对于每个元素,它会调用`findByName`函数,如果元素的名字和年龄与目标一致,则返回迭代器指向该元素。如果找不到匹配的元素,`find_if()`将返回`end()`。
阅读全文