我有这个类如下:
class nLetterFrequency
{
private:
map<string, int> frequencyTable;
void insert(const string& letterPerm);
void parseFile(int n); //calls insert()
public:
nLetterFrequency(int n); //calls parseFile()
~nLetterFrequency();
};
显然我的代码没有任何问题,事实证明它只需要 2 到 3 分钟就可以完成(这不是很奇怪吗?)。这对我来说似乎很可疑,因为我首先用 Java 编写了这个实现,并在几秒钟内完成。两种语言之间的表现怎么会如此激烈?这是由于地图类在 c++ 和 Java 中实现的方式不同吗?在 Java 中,我使用的是 TreeMap,我也使用了 HashMap,但切换到 TreeMap 因为我想对我的地图进行排序。这是 parseDictionary 函数和 insert 函数的代码。构造函数调用 parseDictionary() 就是这样。
void nLetterFrequency::parseDictionary(int n)
{
ifstream infile("3dictionary.txt"); //length of words >= 3
while(!infile.eof()) //while we are not at the end of the file
{
string word;
getline(infile, word);
if(word.length() < n)
{
printf("Error: check the dictionary file since word.length() < n\n");
exit(0); //quit the program
}
for(int i = 0; i < word.length() - n + 1; i++)
{
string perm("");
for(int j = 0; j < n; j++)
{
perm += word[i+j];
}
insert(perm);
}
}
infile.close();
}
void nLetterFrequency::insert(const string& letterPerm)
{
if(frequencyTable.count(letterPerm)) //letterPerm is already in frequencyTable
{
frequencyTable.find(letterPerm)->second++; //increment the current frequency of entry letterPerm
}
else //insert the new permutation into frequencyTable
{
frequencyTable.insert(pair<string, int>(letterPerm, 1));
}
}
感谢所有的帮助,我很感激!