Невозможно вставить данные в 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>).

Это немного сложно читать и писать, хотя.

Обратите внимание, что двойные скобки {{или}} используются вместе. Внутренние {} отмечают одну запись на карте, а внешняя {} представляет карту в целом.

Понравился другой ответ для простоты.

Другие вопросы по тегам