C++ 如何迭代C++;地图?

C++ 如何迭代C++;地图?,c++,dictionary,stl,C++,Dictionary,Stl,例如: map<string, Person*> family; family["Bill"] = new Person(); family["Jill"] = new Person(); ... // vvv does not work vvv for (Person* person: family) delete person; map族; 家庭[“比尔”]=新人(); 家庭[“吉尔”]=新人(); ... //vvv不工作vvv (个人*个人:家庭) 删除人;

例如:

map<string, Person*> family;
family["Bill"] = new Person();
family["Jill"] = new Person();

...

// vvv does not work vvv
for (Person* person: family)
    delete person;
map族;
家庭[“比尔”]=新人();
家庭[“吉尔”]=新人();
...
//vvv不工作vvv
(个人*个人:家庭)
删除人;
我试图在映射中对每个循环执行一次for,以释放所有指针的内存。这适用于向量,但不适用于贴图。我怎样才能做到这一点

for( auto const& pair : family )
{
    cout << pair.first << " represented by object at " << (void*)pair.second << "\n";
}
相反,如果您存储
Person
对象(而不是指向动态分配对象的指针),这将减少到

family.clear();

如果你在任何搜索引擎中键入你的标题,你会发现很多方法,你可以查找
std::map
value\u type
是什么,然后使用
auto
。你就是这么做的。为什么不让你的地图上有智能指针而不是原始指针呢?然后,只需清除映射就会导致智能指针释放其资源。使用智能指针或按值存储此人,内存将自动为您释放。每个人都想说的是,。简单的
删除pair.second足够吗?@CoffeeMaker:只要该指针以后从未被引用,甚至没有被复制。确保这一点的一种方法是删除该映射条目。但是,在一个迭代所有成员的基于范围的循环中,你不能轻易做到这一点。@CoffeeMaker:我用更多的信息更新了答案。
family.clear();