Предположим, у меня есть следующий класс:Элементы, помещенные в unordered_map, хранящиеся в стеке или куче?
class MyOtherClass{
std::unordered_map<int, std::multimap<int, MyClass*>> _xy;
void putObject(int x,int y,MyClass* obj);
void containsXkey(int x){
bool found = false;
std::unordered_map<int,std::multi map<int,MyClass*>>::const_iterator index = _xy.find(x);
if(index = _xy.end(){
found = false;
}else{
found = true;
}
return found;
}
}
сказать, что я хочу, чтобы написать функцию, чтобы разместить MyClass в точке с координатами (2,3), то я бы сделать что-то вроде этого:
void putObject(int x, int y, MyClass* obj){
if(!containsXKey(x){
//Since it doesn't contain an empty multimap, I'm creating one.
std::multimap<int, MyClass*> foo; //This is created on the stack
_xy[x] = foo; //What happens here ?
}
std::multimap<int,MyClass*>& foo = _xy[x];
foo.insert(y,obj);
}
Поэтому мой вопрос: сначала нет записей в unordered_map
, поэтому в первый раз, когда я хочу добавить элемент в определенный ключ, мне нужно создать multimap
. В стеке создается multimap
. Итак, что происходит, когда я назначаю его ключу? Это сделать копию? Где он хранится?
Нет таких вещей, как _stack_ или _heap_. 'std :: unordered_map' использует динамическое распределение памяти для хранения элементов карты (как это делают большинство других стандартных контейнеров). –
Так что же происходит с мультимапом, который я создал? –
Похоже, что он скопирован на '_xy [x]'. –