#include <vector>
#include <algorithm>
#include <iostream>
#include <unordered_map>
std::vector<std::vector<std::string>> groupAnagrams(std::vector<std::string>& vec) {
std::unordered_map<std::string, std::vector<std::string>> map;
std::vector<std::vector<std::string>> groups;
for (int i = 0; i < vec.size(); i++) {
std::string word = vec[i];
sort(word.begin(), word.end());
map[word].push_back(vec[i]);
}
for (auto x : map) {
groups.push_back(x.second);
}
return groups;
}
int main()
{
std::vector<std::string> vec;
vec.push_back("demo");
vec.push_back("are");
vec.push_back("code");
vec.push_back("ear");
vec.push_back("trap");
vec.push_back("rapt");
vec.push_back("dome");
vec.push_back("part");
vec.push_back("mode");
std::vector<std::vector<std::string>> groups = groupAnagrams(vec);
for (int i = 0; i < groups.size(); i++) {
if (groups[i].size() > 0) {
for (int j = 0; j < groups[i].size(); j++)
std::cout << groups[i][j] << " ";
}
std::cout << "\n";
}
}
/*
run:
trap rapt part
code
are ear
demo dome mode
*/