从对向量中按值擦除元素

Arn*_*rne 6 c++ vector c++20

C ++ 20开始,我们可以通过执行以下操作从向量中按值删除元素:

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

那真的很方便,更不用说了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!
Run Code Online (Sandbox Code Playgroud)

那么,有没有一种方法可以通过second向量对中的值擦除元素?

Jar*_*d42 3

它会是这样的:

std::erase_if(v, [](const auto& p){ return p.second == "2"; });
Run Code Online (Sandbox Code Playgroud)

演示