使用vector 和map構造二維矩陣和二維表格
使用vector 和map構造二維矩陣和二維表格
眾說周知,我們可以適應vector容器來構造二維陣列.當然這樣雖然會帶來安全性的優勢但是會帶來效率上的低下.效率差異的主要原因便在於編譯器對二維陣列的優化.當然,在平日的編寫過程中由於安全性的原因,我個人是比較傾向於使用.
關於二者效率的對比可以看下列網址
那麼怎麼使用vector構造二維陣列呢?
使用下列舉行來構造
#define N 5
#definde M 5
vector<vector<int> > Matrix(N, vector<int>(M));
這樣就構造一個好一個二維矩陣了
當然如果對使用指標構造二維陣列感興趣的可以看下列網址
後來在寫某個程式的時候意外要儲存一個表格
A |
B |
C |
D |
E |
a |
||||
b |
||||
c |
||||
d |
表格內的各種存放一個字串.最初的想法是構造一個三維字元陣列char ***;
後來在因為在寫二維陣列的時候突然想到可以使用容器vector,進而想到使用更為有利的map來嘗試實現表格
Map的定義如下
map 是鍵-值對的集合。map 型別通常可理解為關聯陣列(associative array):可使用鍵作為下標來獲取一個值,正如內建陣列型別一樣。而關聯的 本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置來獲 取。
詳細的細節和對應的函式,適應說明參照
由於
定義與初始化
與vector類似,用於map構造的表格具有類似的形式.
map<型別1,map<型別2,型別3>>;
在這裡採用的儲存模式為
型別1 -> (型別2 -> 型別3)
使用兩個資料來確定另一個數據的儲存.例如在上述表述的表格可以採用如下的方式來儲存
map<char, map<char, string>> Table;
這樣完成了表格的構造了;
由於map獨特的[]操作,這裡要重點說一下
在map中:用下標訪問不存在的元素將導致在 map 容器中新增一 個新元素,它的鍵即為該下標值。
而在上述的Table中,採用Table[‘A’][‘a’] = “aBCD”;
可能有多重含義
(1)原本的Table[‘A’][‘a’]修改為”aBCD”
(2)不存在Table[‘A’][‘a’],在Table新增上一個Table[‘A’][‘a’] = ”aBCD”;
當然為了避免引發歧義,也可以在這裡使用map裡面的find和insert函式