我无法处理大型文件。我从使用数组更改为映射,因为这可能有所帮助。任何建议表示赞赏。
map<char,int> freq;
size_t size = 0;
for (char c; cin.get(c); size++){
if (isalpha(c))
freq[tolower(c)]++;
}
cout << "char" << freq['a'] << endl;
最佳答案
由于标准的char
只有八位,因此使用整个映射是相当浪费的。声明一个256个int
的数组,使您的char
成为一个unsigned
,并以可想象的最快方式计算频率:
int freq[256];
size_t size = 0;
// Count without any checks or conditions
for (char c ; cin.get(c) ; size++) {
freq[(unsigned char)c]++;
}
// Go through the lowercase letters, and add upper frequencies to them
for (int i = 'a' ; i <= 'z' ; i++) {
freq[i] += freq[toupper(i)];
cout << (char)i << " --> " << freq[i] << endl;
}
关于c++ - 使用 map 计算大数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13906442/