2009-10-28 37 views
1

下面的代碼是否正常?在不插入標準地圖元素的情況下調用函數

class A 
{ 
    public: 
    A(); 
    void foo(); 
}; 

map<int,A> m; 
m[0].foo(); 

還是我必須要做到以下幾點:

map<int,A> m; 
m[0] = A(); 
m[0].foo(); 

還有,我可以這樣做:

map<int,A> m; 
A a = m[5]; 

又有怎樣通過參考訪問:

void foo(A & a); 
map<int,A> m; 
foo(m[5]); 
+0

今天已經討論過http://stackoverflow.com/questions/1639544/why-does-stdmap-operator-create-an-object-if-the-index-doesnt-exist – AnT 2009-10-28 21:17:15

回答

5

map :: operator []如果它尚不存在,將立即創建一個新值。所以你所有的代碼示例都可以工作。

這就是說,本實施例中:

map<int,A> m; 
m[0] = A(); // redundant 
m[0].foo(); 

是矯枉過正作爲第二線是冗餘的。

1

是的,它們都是有效的用法。 operator[]返回一個引用,該引用指向已存在或已由調用中的operator[]本身插入的鍵值對的值的一半。

0

當你使用std :: map的'[]'操作符時,如果沒有指定ID的項目存在,一個新的對象將被自動默認構造。

相關問題