stl — удалить слова текстового файла с карты в C ++ без цикла

Я пытаюсь сделать набор для хранения определенных слов текстового файла. Затем я хочу удалить эти слова из карты, которую я уже составил. Я успешно сделал набор для хранения этих слов, но не могу удалить их с карты. Кроме того, я не могу использовать оператор цикла (например, для цикла или цикла).

#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

2

Решение

Не могли бы вы предоставить объявление вашей карты?

Например, если карта 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());
0

Другие решения

Если я правильно понимаю, вам нужно что-то вроде этого:

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

По вопросам рекламы [email protected]