2015-05-13 3 views
2

У меня есть этот специальный массив строк в C++:C++ Многомерные строка инициализации массива (станд :: Карта)

#include <map> 
#include <string> 

std::map<std::string, std::map<int, std::string>> oParam; 
oParam["pA"][0] = "a"; 
oParam["pA"][1] = "b"; 
oParam["pA"][2] = "c"; 
oParam["pB"][0] = "x"; 
oParam["pB"][1] = "y"; 
oParam["pB"][2] = "z"; 

Но я хотел бы, чтобы инициализировать его со списком инициализации, что-то вроде этого:

std::map<std::string, std::map<int, std::string>> oParam{ 
    { "pA", { "a", "b", "c" } }, 
    { "pB", { "x", "y", "z" } }, 
}; 

Но это дает мне ошибку. Я не хватает некоторых скобок?

ответ

3

Если целые числа действующих в качестве ключей во внутренней карте будет смежными, вы могли бы просто использовать вектор вместо:

std::map<std::string, std::vector<std::string>> oParam; 

С, что инициализация вы дали должна работать.

Если вы продолжаете использовать std::map, вместо этого вам придется сделать пару вещей. Во-первых, он поддерживает разреженные ключи, поэтому вам нужно указать ключ для каждой строки, которую вы хотите вставить. Во-вторых, вам нужно будет приложить все предметы для вставки в одну карту в фигурных скобках, например:

std::map<std::string, std::map<int, std::string>> oParam { 
    { "pA", { { 0, "a" }, { 1, "b" }, { 2, "c" } } }, 
    { "pB", { { 0, "x" }, { 1, "y" }, { 2, "z" } } } 
}; 
+0

Thx для векторного решения! – Ilyssis

Смежные вопросы