#include #include #include #include #include #include #include #include using namespace std; int main() { ifstream ifs{"names.txt"}; map> tags; for ( string line; getline(ifs, line); ) { istringstream iss {line}; string name; getline(iss, name, ':'); for_each(istream_iterator{iss}, istream_iterator{}, [&tags, name](string tag){ tags[tag].insert(name); }); } set input_tags; copy(istream_iterator{cin}, istream_iterator{}, inserter(input_tags, begin(input_tags))); set common_names{tags[*begin(input_tags)]}; for_each(next(begin(input_tags)), end(input_tags), [&common_names, &tags](string tag){ set common; set_intersection(begin(tags[tag]), end(tags[tag]), begin(common_names), end(common_names), inserter(common, common.begin())); common_names = common; }); copy(begin(common_names), end(common_names), ostream_iterator{cout, "\n"}); }