我正在尝试使用 std::find_if 来查找符合某些条件的对象。考虑以下因素:
struct MyStruct
{
MyStruct(const int & id) : m_id(id) {}
int m_id;
};
...
std::vector<MyStruct> myVector; //... assume it contains things
MyStruct toFind(1);
std::vector<MyStruct>::iterator i = std::find_if(myVector.begin(), myVector.end(), ???);
我不知道要在 中放入什么???
我见过的所有示例都有一个 lambda,它使用硬编码值来检查 ID。我想要的是仅当 toFind
的 id 与 vector 中的一项的 id 匹配时才返回迭代器/成功。
我看到的所有示例都没有告诉我如何传递两个参数
编辑
附加信息 我必须在两种不同的场景中使用它 其中结构体有一个 == 运算符 另一种情况是,结构体没有运算符 == - 我无法创建一个运算符,因为在这种情况下查找匹配项的标准并不像用于等价运算符的那样严格。
(感谢所有回复的人;在一种情况下我能够使用 find() ,而在您的帮助下我能够在另一种情况下使用 find_if() )
最佳答案
试试这个:
std::find_if(
myVector.begin(), myVector.end(),
[&toFind](const MyStruct& x) { return x.m_id == toFind.m_id;});
或者,如果您为 MyStruct
定义了适当的 ==
重载,则可以只使用 find
:
std::find(myVector.begin(), myVector.end(), toFind); // requires ==
当您进行某种异构查找时,find_if
版本通常是最好的,例如,如果您刚刚获得一个 int
,而不是MyStruct
的值。
关于c++ - 如何将 lambda 用于 std::find_if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42933943/