vector 與map的下標操作

Andy Niu發表於2013-11-26

1、vector的下標操作不會新增元素,只能針對已經存在的元素操作。

2、map的下標操作具有副作用,key不存在,會在map中新增一個具有該key的新元素,新元素的value使用預設構造方法。

3、為什麼要這樣設計?

  vector是基於連續記憶體的容器,在尾部操作效率高,使用push_back新增元素,使用下標必須保證下表存在元素。

  map是基於節點的容器,元素有序。使用下標操作,第一步是查詢key是否存在,map的內部實現是二叉樹(AVL樹或者紅黑樹),採用二分查詢。不管是否存在key,查詢key 的時候,也已經確定了key的位置。因此,如果不存在key,乾脆新增一個,反正已經知道新增位置,對於基於節點的容器,在知道插入位置的情況下,插入效率為常數時間。

相關文章