Невозможно вставить данные в STL карту карты карты
У меня есть следующее объявление карты:
std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> m;
Я попытался вставить данные следующим образом:
m.insert({ "HARDWARE\\DESCRIPTION\\System\\BIOS", { "REG_SZ", { "SystemSKU", "SystemSKU" } } });
но это не работает, какой правильный синтаксис для вставки данных?
2 ответа
Решение
Если вы не можете заставить его работать со списками инициализаторов, вы можете использовать классический способ:
m["HARDWARE\\DESCRIPTION\\System\\BIOS"]["REG_SZ"]["SystemSKU"] = "SystemSKU";
Надеюсь это поможет.
Эта инициализация списка будет работать для вас:
std::map<std::string, std::map<std::string, std::map<std::string, std::string>>> m{{"HARDWARE\\DESCRIPTION\\System\\BIOS",
{{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }}
}};
Или используйте вставку
m.insert({"HARDWARE\\DESCRIPTION\\System\\BIOS",
{{ "REG_SZ", {{ "SystemSKU", "SystemSKU" }} }} //create inner maps using double braces
});
Он использует конструктор списка std:: map (тот, который принимает std::initializer_list>).
Это немного сложно читать и писать, хотя.
Обратите внимание, что двойные скобки {{или}} используются вместе. Внутренние {} отмечают одну запись на карте, а внешняя {} представляет карту в целом.
Понравился другой ответ для простоты.