C++ 在C+;中从映射中删除文本文件的单词+;无环

C++ 在C+;中从映射中删除文本文件的单词+;无环,c++,stl,iostream,fstream,remove-if,C++,Stl,Iostream,Fstream,Remove If,我试图建立一个集合来存储文本文件中的某些单词。然后我想把这些单词从我已经编好的地图上删除。我已经成功地建立了一个集合来存储这些单词,但我无法将它们从地图中删除。此外,我不能使用循环语句(如for循环或while循环) #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 ifstream stop_文件(“remove_words.txt”); 流输出(“output.txt”); 设置S; 复制(istream_迭代器(停止文件), istream_迭

我试图建立一个集合来存储文本文件中的某些单词。然后我想把这些单词从我已经编好的地图上删除。我已经成功地建立了一个集合来存储这些单词,但我无法将它们从地图中删除。此外,我不能使用循环语句(如for循环或while循环)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
ifstream stop_文件(“remove_words.txt”);
流输出(“output.txt”);
设置S;
复制(istream_迭代器(停止文件),
istream_迭代器(),
插入器;
//复制:将文本文件复制到集合中
如果(M.begin(),M.end(),S),则移除_;
//remove:函数我尝试删除地图中存储的单词中的单词
//我画的地图都准备好了,不用担心

您能提供地图的声明吗

例如,如果映射为
map
,则可以执行以下操作:

for (string & s : set)
{
    map.erase(s);
}
std::for_each(set.begin(), set.end(), 
    [&map](const std::string & s) { map.erase(s); });
使用for_时,每个都将如下所示:

for (string & s : set)
{
    map.erase(s);
}
std::for_each(set.begin(), set.end(), 
    [&map](const std::string & s) { map.erase(s); });
此外,使用递归可以完全不使用循环进行删除

template <typename Iter>
void remove_map_elements(
    std::map<std::string, int> & map,
    Iter first,
    Iter last)
{
    if (first == last || map.empty())
        return;

    map.erase(*first);
    remove_map_elements(map, ++first, last);
}

如果我理解正确,你需要这样的东西:

  std::map< std::string, int > m = {
    { "word1", 1 },
    { "word2", 2 },
    { "word3", 3 },
    { "word4", 4 }
  };

  std::set< std::string > wordsToRemove = { "word2" };

  std::for_each( 
    wordsToRemove.begin(), 
    wordsToRemove.end(), 
    [&m] ( const std::string& word )   
    { 
      m.erase( word );  
    } 
  );
std::mapm={
{“word1”,1},
{“word2”,2},
{“word3”,3},
{“word4”,4}
};
std::setwordsToRemove={“word2”};
标准::对于每个(
wordsToRemove.begin(),
wordsToRemove.end(),
[&m](常量标准::字符串和单词)
{ 
m、 擦除(单词);
} 
);

它应该是
常量字符串&
,因为
std::set::iterator
是一个常量迭代器。没有
const
,它无法编译。是的,谢谢。我的映射是,但我确实需要另一种方法来删除单词,而不必编写for循环。不过,for_都是适用的。@Dorothy为什么不能使用for循环呢?它必须在某个点进行某种循环。另外,最有效的方法需要您编写自己的for循环,以考虑集合和映射的顺序。一个简单的解决方案将在每次擦除时执行完整的日志查找。@NeilKirk很抱歉我没有提到。实际上,这是一个作业,我正在学习高级C++循环,所以我不能。