C ++:结构初始化和映射

时间:2010-06-30 21:26:18

标签: c++ syntax

这很好用:

#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};
}

有没有办法让结构初始化语法有效?我做错了,还是禁止用地图?

3 个答案:

答案 0 :(得分:6)

您可以添加构造函数:
在这种情况下,我会说它比花哨的新初始化程序更好,因为它实际上让维护者看到地图中放置了什么类型,而不必去寻找它。

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

.....

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

答案 1 :(得分:3)

没有

不符合现行标准(C ++ 03)。

但如果您使用的是new initialization syntax of C++0x已实施(like a recent version of gcc)的编译器,则允许这样做。

答案 2 :(得分:0)

对我来说很好。

使用: gcc版本4.4.4 20100503(Red Hat 4.4.4-2)(GCC)

后一种语法会抛出警告,但仍会编译,显然这是c ++ 0x语法:

警告:扩展初始化程序列表仅适用于-std = c ++ 0x或-std = gnu ++ 0x

添加该开关并且-Wall编译正常。也许升级你的编译器?