~cpp
#include <string>
#include <list>
#include <map>
#include <algorithm>
#include <iostream>
using namespace std;
class Dictionary
{
private:
map<string, list<string> > Anagrams;
public:
void InsertWord(string Word)
{
string key = Word;
sort(key.begin(), key.end());
if(Anagrams.find(key) == Anagrams.end())
Anagrams[key] = list<string>();
Anagrams[key].push_back(Word);
}
void OutputAnagram(list<string> Anagram)
{
ostream_iterator<string> os_iter(cout, " ");
copy(Anagram.begin(), Anagram.end(), os_iter);
}
void OutputDictionary()
{
map<string, list<string> >::iterator iter;
for(iter = Anagrams.begin() ; iter != Anagrams.end() ; iter++)
{
OutputAnagram(iter->second);
cout << endl;
}
}
};
void main()
{
string word;
Dictionary dic;
while(cin >> word)
dic.InsertWord(word);
dic.OutputDictionary();
}
P3 1GHz 512MB
WinXP VC++7.0 Maximize Speed Optimization 4.1초