Вы не можете хранить ссылки, потому что они не являются копируемыми (и некоторые операции будут невозможны, потому что они также не являются конструктивными по умолчанию).
Однако вы можете эмулировать поведение, используя указатель:
std::map<int, ClassA*> test;
Это немного раздражает, потому что вам нужно разыменовать дважды:
std::map<int, ClassA*>::iterator it = test.begin();
it->second->foo();
, но с map
это гораздо менее запутанно, чем с vector
или set
(это будет (*it)->foo()
.
Наконец, есть несколько ошибок (указателей):
- Вы должны убедиться, что указанный объект останется живым, пока вы хотите использовать указатель
- Инициализация указателя по умолчанию является случайным значением, использование которого вызывает неопределенное поведение
- Когда указатель отбрасывается, объект остается (к счастью), но это означает, что вам нужно, чтобы он был уничтожен в одной точке