C++ 如何从vector中删除所需字符串<;字符串>;?

C++ 如何从vector中删除所需字符串<;字符串>;?,c++,C++,我需要通过函数bool谓词(***,const string&event)从map Events中删除所需的字符串 我尝试用算法来实现这一点: for(auto& item : Events){ remove(item.second.begin(), item.second.end(), [predicate, item](string event){ return predicate(item.first, event); } } 但是它不起作用在代码中似乎有点混乱。下面的步骤应该可

我需要通过函数
bool谓词(***,const string&event)
map Events
中删除所需的字符串

我尝试用算法来实现这一点:

for(auto& item : Events){
remove(item.second.begin(), item.second.end(), [predicate, item](string event){
return predicate(item.first, event);
}
}

但是它不起作用

在代码中似乎有点混乱。下面的步骤应该可以做到这一点

std::map<***, std::vector<std::string>> Events;

bool predicate(***, const std::string& event) {
    ...
}

for (auto& item : Events) {
    item.second.erase(std::remove_if(item.second.begin(), item.second.end(), 
        [item](const std::string& event) {
            return predicate(item.first, event);
    }), item.second.end());
}
std::映射事件;
布尔谓词(***,常量std::字符串和事件){
...
}
用于(自动项目:事件(&E){
item.second.erase(std::remove_if(item.second.begin(),item.second.end(),
[项目](常量标准::字符串和事件){
返回谓词(item.first,event);
}),item.second.end());
}
代码的主要问题是

  • 如果,则应使用
    remove\u,而不是
    remove
  • 您没有在向量上调用
    erase
    <代码>删除\u如果
    (和
    删除
    )本身不删除任何内容。它们所做的只是将要删除的字符串放在向量的末尾,并向要删除的第一个字符串返回一个迭代器。您必须调用
    vector::erase
    来执行实际的删除操作

  • 更详细地描述“它不起作用”。它删除了其他东西吗?它没有移除任何东西吗?它是在第一个地方编译的吗?另外,创建一个。