2

テキストファイルの特定の単語を保存するセットを作成しようとしています。次に、すでに作成したマップからこれらの単語を削除したいと思います。これらの単語を保存するセットを作成しましたが、マップから削除できません。また、ループ文 (for ループや while ループなど) は使用できません。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <utility>
#include <sstream>
#include <list>

  ifstream stop_file( "remove_words.txt" );
  ofstream out( "output.txt" );

  set <string> S;

  copy(istream_iterator<string>(stop_file), 
       istream_iterator<string>(),
       inserter(S, begin(S)));

         //copy: copy from text file into a set

  remove_if(M.begin(), M.end(), S);

        //remove: function I try to remove words among words stored in a map
        //map I made up is all set, no need to worry
4

2 に答える 2

0

マップの宣言を提供していただけますか?

たとえば、マップが の場合、次のmap<string, int>ようなことができます。

for (string & s : set)
{
    map.erase(s);
}

for_each を使用すると、次のようになります。

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);
}

あなたがどのように呼ぶか

 remove_map_elements(map, set.begin(), set.end());
于 2015-11-26T03:29:08.390 に答える