使用地图对大数据进行计数

using maps to count large data

本文关键字:数据 地图      更新时间:2023-10-16

我无法让它处理大文件。我从使用数组改为使用地图,因为这可能会有所帮助。任何建议不胜感激。

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 s 的数组,将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;
}