这很好用:
#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};
}
有没有办法让结构初始化语法有效?我做错了,还是禁止用地图?
答案 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编译正常。也许升级你的编译器?