我无法处理大型文件。我从使用数组更改为映射,因为这可能有所帮助。任何建议表示赞赏。

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/

10-13 03:29