我正在尋找正確的數據結構來存儲輸入流中給定類型的字符數,逐個字母。我事先知道字母的大小(大約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. 正確的Firebase數據庫結構
- 3. 選擇正確的數據結構
- 4. 使用正確的數據結構
- 5. 結構數組打印不正確| C++
- 6. c#中正確的C++結構編組#
- 7. c - 正確釋放結構的內存
- 8. C#正確的程序結構
- 9. C數據結構
- 10. 此數據的正確數據庫結構是什麼?
- 11. C結構到結構的任務 - 在目標結構不正確的值
- 12. C++中的數據結構
- 13. 如何正確釋放結構? ANSI C
- 14. 「幻想足球」數據庫中的結果表的正確數據庫結構
- 15. C/C++函數沒有正確調用開關結構
- 16. 正確的JavaScript函數結構
- 17. 正確的函數定義結構?
- 18. 正確的數據結構來表示數獨謎題?
- 19. 正確的結構創建
- 20. 正確的Java類結構
- 21. 正確的SQL結構
- 22. .NET - 正確的UI結構
- 23. 正確的表結構
- 24. C++數值分析精確的數據結構?
- 25. 如何正確malloc爲C的結構數組
- 26. 不反映在C#正確數目的字節結構尺寸
- 27. C++數據結構堆
- 28. 特里數據結構C
- 29. C數據結構錯誤
- 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