2014-11-03 52 views
0

我正在寻找正确的数据结构来存储输入流中给定类型的字符数,逐个字母。我事先知道字母的大小(大约10),但流将大约1GB。主要标准是快速访问。可以使用适当选择的列表enum来使事情更清楚,但这是最好的方法吗?C++正确的数据结构

+0

“最好”的方式取决于环境和个人意见。如何处理地图(char值 - >长整数)? – deviantfan 2014-11-03 10:35:12

+1

数据结构的目的是什么?存储数据?处理? – 2014-11-03 10:35:22

+0

连续的int count [10]或者std :: vector count(10,0)'。但我认为这取决于您将使用的算法。 – Niall 2014-11-03 10:37:03

回答

4

鉴于性能要求,考虑一个布局即在存储器相邻的;从而帮助减少缓存未命中。

有点像;

const std::size_t SIZE = 10; 
int count[SIZE] = {}; 
// or 
std::vector<int> count(SIZE, 0); 

如果您需要与字符一起将计,那么,“对”可以帮助;

struct Datum { 
    Datum() : c('\0'), count(0) {} 
    char c; // assuming the "alphabet" is in the char range 
    int count; 
}; 

std::vector<Datum> count(SIZE); 

Herb SutterBjarne提供一些材料和经验证明,为什么std::vector应该受到青睐。与往常一样,测量应作出验证性能给你的数据结构,算法和相关数据访问等

+1

'int count [256];'可以避免间接字符串 - >索引。 – Jarod42 2014-11-03 10:47:32

0

一个简单的阵列将最佳工作:

int counters[SIZE_OF_ALPHABET];

0

为了存储你可以尝试让字母编码表和简单的字符数组(char是足以存储的1 10个不同的字符)。像:

map<int, char> m; 
m['A'] = 1; 
m['B'] = 2; 
... 
char data[SIZE]; 

for(int i = 0; i < SIZE; i++){ 
    int ch = read(); 
    data[i] = m[ch]; 
} 

或将2个项目压缩成一个字符。