【发布时间】:2018-07-20 18:52:54
【问题描述】:
我有一张<MyObject, int> 的地图来计算每个实例的出现次数。用相等的 myObject2 覆盖 key myObject1 后,myObject1 会被删除,分配给 myObject1 的内存会恢复吗?
例如,我有一个包含姓名、性别、年龄、身高和人的文本文件。假设我只想计算有多少独特的(姓名、性别)对。所以我创建了我的 Person (string name, int gender) 对象,并将其添加到 std::map (假设我必须使用 map 而不是 set)
std::map<Person, int> myMapCounter;
//for each line
Person newperson(name, gender);
myMapCounter[newperson] = 1 ;// just a dummy value
//end for
int number = myMapCounter.size();
在创建一个与上一行中的旧对象相等的新 Person 对象时,myMapCounter[newperson] = 1 将删除旧对象(恢复内存,因此该特定“人”只有 1 个内存块),或者“ old”对象还会存在于内存中吗?
【问题讨论】:
-
Map 存储其键的副本。而这些副本仅公开为
const。您不能更改地图元素的键。 -
奇怪的问题。使用
compare函数比较密钥。如果旧的和新的同样比较为真,那么这意味着钥匙已经在那里,所以不需要更换任何东西。
标签: c++ memory-management stdmap