map這種容器的下邊訪問和Vector等容器的下標訪問有本質的區別。

map這種容器的下邊訪問和Vector等容器的下標訪問有本質的區別。
對於Vector容器,用aVector[i]訪問第i個元素時,如果元素不存在,容器不會增加元素,
而對於map,用aMap[key]
訪問鍵key對應的對象時,如果該鍵對應的對象存在,則返回該對象(這和Vector一樣),但是,當鍵值爲key的元素不存在時,容器會自動的增加一個pair,鍵爲key,而值則爲一個容器定義時指定的類型並默認初始化(即,如果該類型爲基本類型,則初始化爲0,比如本例中,aMap[1]的使用會產生一個pair,<1,NULL>,若該類型爲類類型,則調用默認構造函數初始化之)

顯然,本例中,aMap[1]爲NULL,後面的erase()不會執行,使得後面的
插入語句aMap.insert(1,new A())鍵值衝突

eg:如下代碼會導致錯誤

#include <iostream>
#include <map>

using namespace std;

struct A
{
A(int i)
{
x=i;
}
int x;
};

int main()
{
map<int,A*> amap;
if ( amap[1] != NULL )
amap.erase(1);
amap.insert(make_pair(1,new A(1)));
amap.insert(make_pair(2,new A(2)));
amap.insert(make_pair(3,new A(3)));
return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章