Я пытаюсь создать карту std :: map для <MyKey, MyValue>
. MyKey
- это перечисление, MyValue
- внешний класс.
Вызов myMap.insert({ key, value })
всегда приводит к ошибке компиляции с ошибкой
"cannot convert argument 1 from 'std::pair<MyKey, MyValue>' to 'std::pair<const _Kty,_Ty> &&'"
Хотя примитивные типы данных всегда работают с std::map.insert()
,эта проблема возникает так часто при попытке содержать классы, написанные кем-то другим. С различными сторонними классами я пробовал много обходных путей, таких как создание объектов заранее или установка их атрибутов после вставки. Но я еще не нашел систематического способа исправить это. Кажется, std::map
гораздо сложнее понять, чем, скажем, Python dict
.
Пример: с третьей стороной lib cppzmq
, Visual Studio 2017
enum MyKey {
key1,
key2
}
std::map<MyKey, zmq::socket_t> mymap;
std::shared_ptr<zmq::context_t> g_context = std::make_shared<zmq::context_t>(1);
zmq:socket_t sock(*g_context, zmq::socket_type::pair);
mymap.insert({ key1, sock });
дает мневышеуказанная ошибка.
Что означает эта ошибка и как ее исправить в целом?
Пожалуйста, помогите.