使用std :: map insert可疑结果

mak*_*san 2 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));**
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

如果我用这个:

mm[_T("name")] = std::make_pair(_T("value1"), static_cast<INT_PTR>(1));
Run Code Online (Sandbox Code Playgroud)

有用.

错误是这样的:

No constructor could take the source type, or constructor overload resolution was ambiguous
Run Code Online (Sandbox Code Playgroud)

与此相同:

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);
Run Code Online (Sandbox Code Playgroud)

为什么它可以像这样使用"insert_or_assign"?

mm.insert_or_assign(_T("name"), vec);
Run Code Online (Sandbox Code Playgroud)

acr*_*075 5

std :: map :: insert只是不采用你正在尝试的两个参数.它需要一个单参数键值对.

mm.insert(std::make_pair(_T("name"), std::make_pair(_T("value1"), static_cast<INT_PTR>(1))));
Run Code Online (Sandbox Code Playgroud)

另一方面,std :: map :: insert_or_assign确实采用了您正在尝试的两个参数.