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

Nic*_*ner 1 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想让它更简洁,我会得到错误:

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

    m[0] = {1, 2};
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ork 6

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

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

.....

m[0] = Bar(1,2);
Run Code Online (Sandbox Code Playgroud)