我正在尋找正確的數據結構來存儲輸入流中給定類型的字符數,逐個字母。我事先知道字母的大小(大約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