2010-06-30 83 views
1

這工作得很好:C++:結構初始化和地圖

#include <iostream> 
#include <map> 

using namespace std; 

struct Bar 
{ 
    int i; 
    int f; 
}; 

int main() 
    { 
     map<int, Bar> m; 

    Bar b; 
    b.i = 1; 
    b.f = 2; 
    m[0] = b; 
} 

但是,如果我想讓它有點更簡潔,我得到的錯誤:

int main() 
{ 
    map<int, Bar> m; 

    m[0] = {1, 2}; 
} 

有沒有什麼方法,使結構初始化語法工作?我做錯了,還是禁止使用地圖?

回答

6

您可以添加一個構造函數:
在這種情況下,我會說這是比花哨的新初始化更好,因爲它實際上讓維護人員看到正在放什麼類型的地圖,而不必去尋找它。

struct Bar 
{ 
    Bar(int anI,int aJ) 
     :i(anI), j(aJ) 
    {} 
    int i; 
    int j; 
} 

..... 

m[0] = Bar(1,2); 
3

編號

不符合現行標準(C++ 03)。

但是,如果您使用的編譯器實現了new initialization syntax of C++0xlike a recent version of gcc),則可以這樣做。

+5

+1。下一個標準甚至允許'map m {{0,{1,2}}};' – 2010-06-30 21:31:52

+0

Johannes>甚至沒有想過這種可能性,謝謝***ç***。我們會進入初始化樂園。 :d – Klaim 2010-06-30 21:33:00

0

適合我。

使用: gcc版本4.4.4 20100503(紅帽4.4.4-2)(GCC)

後者語法引發警告,但仍編譯,顯然這是C++ 0X語法:

警告:擴展初始化程序列表僅適用於-std = C++ 0x或-std = gnu ++ 0x

添加該開關並且-Wall編譯正常。也許升級你的編譯器?