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

标签 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};
}

有什么方法可以使结构初始化语法起作用吗?我做错了吗,还是 map 禁止这样做?

最佳答案

你可以添加一个构造函数:
在这种情况下,我会说它比奇特的新初始化器更好,因为它实际上让维护者无需去寻找它就可以看到映射中放置的是什么类型。

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

.....

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

关于C++:结构初始化和映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153548/

相关文章:

c++ - 使用未声明的标识符 'buffer'和未使用的变量 'buffer'

c++ - 找不到命名空间,尽管它就在那里

postgresql - Postgres 的新手。你能帮我做几个简单的陈述吗?

syntax - 在结构类型中包装 RefCell 和 Rc

c# - SQL 语法问题

c++ - 可以将 GL_FLOAT 纹理作为 COLOR 附件分配给 FBO 吗?

c++ - 未为 std::string 调用 select_on_container_copy_construction

c++ - 包装现有类时如何有效地返回变量

python - Python 生成器是否有 `let` 或 `as` 关键字?

mysql - 尝试将 SQL Server 转换为 MySql 进行类(class)