从一对向量中按值删除元素

6

自从 C++20 版本以后,我们可以通过以下方式来删除一个 vector 中的元素:

std::vector<int> v = {10,20,30,40,50};
std::erase(v,30);

这真的很方便,更何况还有std::erase_if

但是,如果我们有一对向量,并且只要second的值匹配,我们就想要删除该对呢?

std::pair<int, std::string> foo = std::make_pair(1,"1");
std::pair<int, std::string> foo2 = std::make_pair(2,"2");

std::vector< std::pair<int, std::string> > v;
v.push_back(foo);
v.push_back(foo2);

std::erase(v, make_pair(1,"2"));    //This is not going to work!

那么,有没有办法从一个pair向量中按照second值删除元素?


1
使用lambda作为谓词的erase_if - BiagioF
@BiagioFesta 我尝试编写谓词,但由于不知道要传递给谓词的参数/应该返回什么值而被卡住了。 - Arne
1个回答

3
这大概是这样的:
std::erase_if(v, [](const auto& p){ return p.second == "2"; });

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接