C ++ Невозможно заполнить карту массивов C - PullRequest
0 голосов
/ 28 декабря 2011
typedef std::map<std::string,int> string2intMap;
typedef string2intMap arrOfMaps[3] ;

//map : string --> array of maps of <std::string,int>
std::map<std::string,arrOfMaps> tryingStuff;

//map : string --> int
string2intMap s;
s["key"]= 100;

tryingStuff["hello"][0] = s;

Приведенный выше код не компилируется, проблемная строка выглядит так:1006 *

Есть идеи, как заставить это работать ??(Я не хочу менять структуру данных, которая является картой: строка -> массив карт)

Ответы [ 2 ]

5 голосов
/ 28 декабря 2011

Вы не можете хранить массивы в стиле C в контейнерах, потому что они не могут быть назначены; Вы не можете сделать это:

int x[3] = { 0, 1, 2 };
int y[3] = { 3, 4, 5 };

x = y;

Но контейнеры должны иметь возможность назначать / копировать элементы, которые они хранят.

Попробуйте использовать std::vector или boost::array* вместо необработанного массива C.


* Это можно найти как std::array в более поздних версиях стандарта C ++.
0 голосов
/ 28 декабря 2011

В основном массив не копируется.
То, что вы хотите использовать, было вектором ...

typedef std::map<std::string,int>  string2intMap;
typedef std::vector<string2intMap> arrOfMaps;

//map : string --> array of maps of <std::string,int>
std::map<std::string,arrOfMaps>    tryingStuff;

//map : string --> int
string2intMap s;
s["key"]= 100;

tryingStuff["hello"].push_back(s);
...