如何从vector <string>中删除所需的字符串?

时间:2018-08-19 16:56:12

标签: c++

我需要通过功能map<***,vector<string>> Eventsbool predicate(***,const string& event)删除所需的字符串吗?

我试图用算法来做到这一点:

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

但这没用

1 个答案:

答案 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());
}

代码的主要问题是

  1. 您应该使用remove_if,而不是remove
  2. 您没有在引导程序上呼叫eraseremove_if(和remove)本身不会删除任何内容。他们所做的只是将要删除的字符串放在向量的末尾,并将迭代器返回到要删除的第一个字符串。您必须致电vector::erase进行实际删除。