Программа должна вывести «Да», если все слова, содержащиеся в примечании, появляются в журнале (с учетом регистра), в противном случае вывести «Нет». Каждое слово в журнале может использоваться только один раз, то есть, если примечание содержит одно и то же слово дважды, журнал также должен содержать это слово как минимум дважды.
#include<iostream>
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;
void checkMagazine(vector<string> magazine, vector<string> note) {
// Inserts magazine vector into an unordered_map for quick access
unordered_map<string, int> umap;
for (auto& x : magazine)
umap[x] = 1;
// For each word in note search the unordered_map for that word
for (auto& word : note) {
if (umap.find(word) == umap.end()) { // Word not in magazine
cout << "No" << endl;
return;
}
else // Remove single instance of that word
umap.erase(word);
}
cout << "Yes" << endl;
return;
}
int main()
{
vector<string> magazine = { "Help", "me", "please", "please" };
vector<string> note = { "Help", "please", "please" };
checkMagazine(magazine, note);
return 0;
}
Условие else необходимо удалить этот единственный узел из umap (или только одного экземпляра этого конкретного слова), но, насколько мне известно, единственный модификатор, который может сделать это, - «извлечь», но Я не могу использовать C ++ 17 .
Есть ли способ, которым я могу обойти это, или этот метод не будет работать с unordered_map? Будет ли связанный список более подходящим? Я новичок в структурах данных, поэтому любая помощь будет оценена.