подозрительный результат с std :: map insert - PullRequest
0 голосов
/ 11 января 2019

Я пытался использовать:

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 голосов
/ 11 января 2019

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 , с другой стороны, принимает два параметра, которые вы пытаетесь.

...