Итак, я пытаюсь установить unordered_map как значение для другого unordered_map. Теперь у меня проблема, что я не могу поместить значения во вторую unordered_map. Мой код выглядит так.
std::string postCode;
std::string[] postCodeSource = new std::string{1111,2222,3333,4444};
std::unordered_map<std::string,unordered_map<int,Foo*>*> data;
int k1=1234;//can be any number
for(int i = 0; i < 4; i++){
postCode = postCodeSource[i]
if(data[postCode]==NULL) {
data[postCode]=new std::unordered_map<int,Foo*>();
}
data[postCode]->at(int(k1)) = new Foo(postCodeSource[i]);
}
классы:
class Foo{
public:
Foo();
Foo(std::string postCode);
std::string firstName,Customername,postCode;
}
Foo(std::string postCode);
— это простой конструктор копирования.
Теперь, когда я достигаю data[lastPlz.getString()]->at(int(k1.customer)) = new Foo(&k1);
, я получаю исключение из диапазона unordered_map, что имеет смысл, поскольку в k1.customer еще нет объекта! Прежде чем я изменил код, который я создал, и заполнил указатель, выглядящий так.
std::unordered_map<int,Foo*> kdnrMap
kdnrMap[k1.customer] = new Foo(&k1);
а позже я добавил kdnrMap в данные. Это больше не будет работать так, как я предполагал, поскольку для этого метода потребуется полностью заполненный kdnrMap, прежде чем я смогу добавить его к data, что я больше не могу делать.
Поэтому я ищу помощи, чтобы заполнить kdnrMap. Я пробовал почти все, что мог придумать на данный момент.
Foo
,Foo2
; минимальный пример, который действительно компилируется. Мы, вероятно, могли бы подразнить вашу проблему из вашего текстового описания, но это излишне сложно и двусмысленно. Просто напишите простой код, демонстрирующий вашу проблему. - person Yakk - Adam Nevraumont   schedule 19.02.2020operator[]
довольно дорог, вам лучше использовать его только один раз, если в действительности нет необходимости использовать его несколько раз. Вы, поскольку ваша карта, кажется, владеете данными, вам лучше использовать интеллектуальные указатели. - person Slava   schedule 19.02.2020Foo
во внутренней карте как указатель? Почему бы просто неstd::unordered_map<std::string,std::unordered_map<int,Foo>> data;
? - person Daniel Langr   schedule 19.02.2020new
везде - person Slava   schedule 19.02.2020std::unordered_map
хранит свои данные? - person Slava   schedule 19.02.2020