C ++正确的数据结构

时间:2014-11-03 10:31:43

标签: c++

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

3 个答案:

答案 0 :(得分:4)

考虑到性能要求,请考虑在内存中连续的布局;从而有助于减少缓存未命中。

喜欢的东西;

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

如果您需要将计数与角色一起存储,那么&#34;对&#34>可能有所帮助;

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 :(得分:0)

一个简单的数组最有效:

int counters[SIZE_OF_ALPHABET];

答案 2 :(得分:0)

对于存储,你可以尝试制作字母表编码表和简单的char数组(char足以存储10个不同字符中的1个)。喜欢:

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个项目压缩成一个字符。