#include <iostream>
#include <sstream>
#include <unordered_set>
#include <vector>
#include <string>
#include <iterator>
std::istringstream tokens_in(
R"(00sdfdsf
ahdadsg
angel
ksjflsjdf
green
green000
carrot
)"
);
std::istringstream dict_in(
R"(angel
carrot
green
kitten
zoo
)"
);
using dictionary_type = std::unordered_set<std::string>;
dictionary_type read_dictionary(std::istream& is)
{
using iter_type = std::istream_iterator<std::string>;
return dictionary_type(iter_type(is), iter_type());
}
std::vector<std::string> filter(std::istream& token_stream, const dictionary_type& dictionary)
{
std::vector<std::string> filtered_tokens;
std::string token;
while (token_stream >> token)
if (dictionary.count(token))
filtered_tokens.push_back(token);
return filtered_tokens;
}
int main()
{
auto filtered = filter(tokens_in, read_dictionary(dict_in));
for (auto& token : filtered)
std::cout << token << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCnN0ZDo6aXN0cmluZ3N0cmVhbSB0b2tlbnNfaW4oClIiKDAwc2RmZHNmCmFoZGFkc2cKYW5nZWwKa3NqZmxzamRmCmdyZWVuCmdyZWVuMDAwCmNhcnJvdAopIgopOwoKc3RkOjppc3RyaW5nc3RyZWFtIGRpY3RfaW4oClIiKGFuZ2VsCmNhcnJvdApncmVlbgpraXR0ZW4Kem9vCikiCik7Cgp1c2luZyBkaWN0aW9uYXJ5X3R5cGUgPSBzdGQ6OnVub3JkZXJlZF9zZXQ8c3RkOjpzdHJpbmc+OwpkaWN0aW9uYXJ5X3R5cGUgcmVhZF9kaWN0aW9uYXJ5KHN0ZDo6aXN0cmVhbSYgaXMpCnsKICAgIHVzaW5nIGl0ZXJfdHlwZSA9IHN0ZDo6aXN0cmVhbV9pdGVyYXRvcjxzdGQ6OnN0cmluZz47CiAgICByZXR1cm4gZGljdGlvbmFyeV90eXBlKGl0ZXJfdHlwZShpcyksIGl0ZXJfdHlwZSgpKTsKfQoKc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGZpbHRlcihzdGQ6OmlzdHJlYW0mIHRva2VuX3N0cmVhbSwgY29uc3QgZGljdGlvbmFyeV90eXBlJiBkaWN0aW9uYXJ5KQp7CiAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZmlsdGVyZWRfdG9rZW5zOwoKICAgIHN0ZDo6c3RyaW5nIHRva2VuOwogICAgd2hpbGUgKHRva2VuX3N0cmVhbSA+PiB0b2tlbikKICAgICAgICBpZiAoZGljdGlvbmFyeS5jb3VudCh0b2tlbikpCiAgICAgICAgICAgIGZpbHRlcmVkX3Rva2Vucy5wdXNoX2JhY2sodG9rZW4pOwoKICAgIHJldHVybiBmaWx0ZXJlZF90b2tlbnM7Cn0KCgppbnQgbWFpbigpCnsKICAgIGF1dG8gZmlsdGVyZWQgPSBmaWx0ZXIodG9rZW5zX2luLCByZWFkX2RpY3Rpb25hcnkoZGljdF9pbikpOwoKICAgIGZvciAoYXV0byYgdG9rZW4gOiBmaWx0ZXJlZCkKICAgICAgICBzdGQ6OmNvdXQgPDwgdG9rZW4gPDwgJ1xuJzsKfQ==