【发布时间】:2019-06-06 02:17:56
【问题描述】:
我尝试使用:
std::map<std::wstring, std::pair<std::wstring, INT_PTR>> mm;
**mm.insert(_T("name"), std::make_pair(_T("value1"), static_cast<INT_PTR>(1));**
这有什么问题?
如果我使用这个:
mm[_T("name")] = std::make_pair(_T("value1"), static_cast<INT_PTR>(1));
它有效。
错误是这样的:
No constructor could take the source type, or constructor overload resolution was ambiguous
同理:
std::map<std::wstring, std::vector<std::pair<std::wstring, INT_PTR>>> mm;
std::vector <std::pair<std::wstring, INT_PTR>> vec;
vec.push_back(std::make_pair(_T("value1"), static_cast<INT_PTR>(1)));
mm.insert(_T("name"), vec);
为什么它可以像这样与“insert_or_assign”一起使用?
mm.insert_or_assign(_T("name"), vec);
【问题讨论】:
-
尝试
emplace而不是insert。直接转发给pair的构造函数。