地圖和矢量有很大的不同。
短版到你問的實際問題:
,如果你自定義的地圖上做的是已經存在的密鑰的基於密鑰的查找(運營商[])和您的push_back可能像一個效率低下的替代矢量,你只使用向量運算符[]和push_back,是的。
長版本提供,爲什麼你在做什麼,一些背景可能不是真正你想要什麼:
的地圖沒有一個指標,它有一個關鍵。地圖通常以紅黑樹的形式實現。這樣的數據結構允許基於密鑰進行有效的查找。您通常關心某個特定元素的關鍵,而關鍵本身則包含重要信息。密鑰通常不是連續的,並且地圖不會爲映射中未使用的密鑰分配空間。
一個向量是一個連續的內存塊。這允許有效的索引訪問。索引與鍵不同:您通常不關心某個特定元素獲得哪個索引,您獲得的索引取決於插入順序(它們的鍵值與地圖中的插入順序無關),索引到矢量中始終是整數值,並且不能有非連續的索引。
如果您在映射中所做的所有操作都是您自己的自定義push_back,那麼在外部它可能在某些情況下看起來像一個向量,並且在其他情況下(例如迭代器失效)可能不會如此。
由於您實際上並不關心在您的示例中添加的元素的關鍵點,所以地圖的選擇毫無意義。向量中的索引查找速度會更快,並且內存開銷會更小(儘管如果分配了很多對象,最終會導致內存碎片問題,但這是一個單獨的主題)。
最後,如果您不知道要使用哪個容器類,則需要使用向量和列表。理解這兩者之間的差異,以及何時應該使用它們中的任何一個,然後轉向更高級的專用容器,如map,set,它們的「多個」變體以及它們的「無序」變體。
'values [values.size()]'會給你一個運行時錯誤,因爲你正在添加一個** **過去**容器的末尾。 – 2013-03-08 13:56:40
如果您想要順序存儲使用矢量。將地圖用作矢量沒有任何優勢。 – andre 2013-03-08 13:57:44
@ bash.d不,''values'是一張地圖。其運算符'[]'如果該鍵不存在則創建一個條目。 – Angew 2013-03-08 13:57:57