我需要通过功能map<***,vector<string>> Events
从bool predicate(***,const string& event)
删除所需的字符串吗?
我试图用算法来做到这一点:
for(auto& item : Events){
remove(item.second.begin(), item.second.end(), [predicate, item](string event){
return predicate(item.first, event);
}
}
但这没用
答案 0 :(得分:0)
似乎在您的代码中有些混乱。以下应该做
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());
}
代码的主要问题是
remove_if
,而不是remove
。erase
。 remove_if
(和remove
)本身不会删除任何内容。他们所做的只是将要删除的字符串放在向量的末尾,并将迭代器返回到要删除的第一个字符串。您必须致电vector::erase
进行实际删除。