我正在寻找正确的数据结构来存储输入流中给定类型的字符数,逐个字母。我事先知道字母的大小(大约10),但流将大约1GB。主要标准是快速访问。可以使用适当选择的列表enum
来使事情更清楚,但这是最好的方法吗?C++正确的数据结构
0
A
回答
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 Sutter和Bjarne提供一些材料和经验证明,为什么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个项目压缩成一个字符。
相关问题
- 1. 正确的Firebase数据库结构
- 2. 使用正确的数据结构
- 3. 结构数组打印不正确| C++
- 4. C数据结构
- 5. C结构到结构的任务 - 在目标结构不正确的值
- 6. 正确的数据结构来表示数独谜题?
- 7. 正确的Java类结构
- 8. .NET - 正确的UI结构
- 9. 正确的结构创建
- 10. 正确的SQL结构
- 11. 正确MySQL的数据结构的全文搜索
- 12. 我的Firebase数据库结构。这是正确的层次?
- 13. C数据结构错误
- 14. 特里数据结构C
- 15. C++数据结构大O
- 16. C++结构数据成员
- 17. 更改Firebase数据结构的正确方法是什么?
- 18. 正确完成用户活动的数据库结构?
- 19. 如何正确管理复杂的数据库结构?
- 20. 学习数据结构的正确方法
- 21. 随机访问正确的数据结构并没有重复
- 22. asp.net网站和数据库在visual studio中的正确结构
- 23. 选择正确的数据结构enum/struct/class?
- 24. 私有字段的正确数据结构 - 库存
- 25. 处理复杂数据结构的正确方法是什么?
- 26. 正确的食谱程序数据库结构
- 27. iOS连接数据库的正确体系结构?
- 28. 正确放置'全局'数据结构的地方
- 29. 如何选择正确的数据结构
- 30. 正确的C重构
“最好”的方式取决于环境和个人意见。如何处理地图(char值 - >长整数)? – deviantfan 2014-11-03 10:35:12
数据结构的目的是什么?存储数据?处理? – 2014-11-03 10:35:22
连续的int count [10]或者std :: vector count(10,0)'。但我认为这取决于您将使用的算法。 –
Niall
2014-11-03 10:37:03