可疑结果与std :: map插入

时间:2019-01-11 07:03:12

标签: c++ stl stdmap

我尝试使用:

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);

1 个答案:

答案 0 :(得分:5)

std::map::insert根本不采用您要尝试的两个参数。它需要一个单参数键值对。

mm.insert(std::make_pair(_T("name"), std::make_pair(_T("value1"), static_cast<INT_PTR>(1))));
另一方面,

std::map::insert_or_assign确实采用了您要尝试的两个参数。