> 成员使用初始化列表?,c++,c++11,unordered-map,initializer-list,unordered-set"/>

首页 > 解决方案 > 如何初始化 unordered_map> 成员使用初始化列表?

问题描述

我有这门课

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"}}};`

如何修复?

标签: c++c++11unordered-mapinitializer-listunordered-set

解决方案


您需要{}为它再添加一个。请注意,临时不能绑定到对非常量的左值引用。(它们可以绑定到对 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;
}

我猜你可能会错过;{}的元素 ( std::pair) unordered_map以类似的方式,如果要unordered_map包含两个元素,可以将其写为

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

居住


推荐阅读