c++ - 如何使用初始化列表初始化 unordered_map<string, unordered_set<string>> 成员?

标签 c++ c++11 unordered-map initializer-list unordered-set

我有这门课

class A {
    unordered_map<string, unordered_set<string>> n_;
  public:
    A(unordered_map<string, unordered_set<string>>& n) : n_{n} {}
};

我希望能够使用具有该语法的构造函数

int main() {
    A a{{"C", {"A", "B"}}};
    return 0;
}

但是按照现在的写法,我遇到了错误

error: no matching function for call to `‘A::A(<brace-enclosed initializer list>)’ A a{{"C", {"A", "B"}}};`

如何修复?

最佳答案

您需要为其添加一个 {}。并注意临时不能绑定(bind)到非常量的左值引用。 (它们可以绑定(bind)到对 const 或右值引用的左值引用。)例如

class A {
    unordered_map<string, unordered_set<string>> n_;
  public:
    A(const unordered_map<string, unordered_set<string>>& n) : n_{n} {}
    //^^^^^
};

int main() {
    A a{{{"C", {"A", "B"}}}};
    //          ^^^  ^^^     elements of unordered_set
    //         ^^^^^^^^^^    for the unordered_set
    //   ^^^^^^^^^^^^^^^^^   elements (std::pair) of unordered_map (only one here)
    //  ^^^^^^^^^^^^^^^^^^^  for the unordered_map
    // ^^^^^^^^^^^^^^^^^^^^^ for A

    return 0;
}

我猜您可能会错过 unordered_map 的元素 (std::pair) 的 {};以类似的方式,如果你想让 unordered_map 包含两个元素,你可以把它写成

A b{{{"C", {"A", "B"}}, {"F", {"D", "E"}}}};

LIVE

关于c++ - 如何使用初始化列表初始化 unordered_map<string, unordered_set<string>> 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56773086/

相关文章:

c++ - 在 vs2013 中禁用 c++11 功能

c++ - 将 void* 作为 std::unordered_map 的第二个模板参数是什么意思?

c++ - MFC中创建子窗口的正确方法是什么?

c++ - 更喜欢迭代器而不是指针?

c++ - string前的R是否跨平台

c++ - 在 C++ 中调用 system() 的问题

c++ - 使用索引 for 循环遍历 Unordered_map

c++ - Unordered_Map of Maps 还是 Priority_Queues?

c++ - 即使使用 -g 标志进行编译,gdb 中也没有调试符号

c++ - 创建一个可以终止或终止正在运行的进程的按钮