我有这门课
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"}}}};
关于c++ - 如何使用初始化列表初始化 unordered_map<string, unordered_set<string>> 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56773086/