У меня есть hashmap, содержащий элементы структуры Foo (не указатели). Теперь, я хочу иметь указатели на эти предметы в списке. Как я могу это сделать?
Как это:
typedef Whatever_Hash_Map<Foo> Container;
Container container;
...populate container...
std::list<Foo*> l;
for (Container::const_iterator i = container.begin(); i != container.end(); ++i)
l.insert(&*i);
...use list...
Я попытался итерируем HashMap и вставьте & * ИТЭРа к списку но указатели получить признаны недействительными, как только они выходят за рамки ,
Вы не можете использовать этот список, если вы позволите ничего выйти за рамки. Если вам нужно, чтобы список сохранялся после возврата функции, которая его создает, обязательно выделите сам список в куче и верните указатель на него.
Я мог бы это сделать без динамического распределения, не так ли?
Список динамически распределяет узлы. Хэш-карта, возможно, внутренне распределяет ведра динамически. Но вам не нужно явно выделять указатели на Foos динамически - все стандартные и подобные контейнеры будут копировать Foos в кучу, используя семантику значения (т. Е. Конструктор копирования Foo или оператор присваивания).
я так и не работает: для (...) {Foo & бар = * ИТЭР; list.insert (& бар); }
Это само по себе выглядит хорошо, ошибка в другом месте вашего кода. Вот почему вы должны следовать предложению Джеймса и опубликовать достаточно кода, чтобы мы могли указать вашу ошибку.
Это поможет, если вы разместите код, демонстрирующий проблему.Что вы подразумеваете под «указатели становятся недействительными, как только они выходят за рамки?» Вы имеете в виду «как только хэшмап выходит за рамки?» –
№ Hashmap является членом класса, который действителен во время всего запуска программы. – Kiity