假设您有一个由唯一指针组成的C++std::set
,例如
auto my_set = std::set<std::unique_ptr<std::string>>
{
std::make_unique<std::string>("monkey"),
std::make_unique<std::string>("banana"),
std::make_unique<std::string>("orange")
};
使用std::find_if
函数,如何找到该集合中的第一个元素,使指针指向";orange
";?
到目前为止,我得到了:
auto food = "orange";
auto find_orange
= std::find_if(my_set.begin(), my_set.end(), [&food](const auto& ptr) -> bool {
return *(*ptr) == food;
}
);
但这不会编译。有什么想法吗?
在这些函数中,ptr
究竟是什么即谓词中的参数?它是指向容器中每个元素的指针吗?
这个问题缺少一个合适的最小可复制示例。当我们制作一个MCVC时:https://godbolt.org/z/bfYx39
问题来自lambda返回
return *(*ptr) == food;
作为CCD_ 5存在CCD_。因此,您只需要取消引用一次:
auto find_orange = std::find_if(my_set.begin(), my_set.end(),
[&food](const auto& ptr) {
return *ptr == food;
// ^^^^^^^^^^^^
}
);
你不需要在那里重复取消引用。