如何获取std::指针集中的第一个元素,指针指向特定值



假设您有一个由唯一指针组成的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;
//     ^^^^^^^^^^^^
}
);

你不需要在那里重复取消引用。

相关内容

  • 没有找到相关文章

最新更新