我的地图有以下定义,
typedef std::list<HolderClass*> QueueHolderList;
map<string, QueueHolderList > OrderQueue;
并按上面的push_back方式填写,
map<string, QueueHolderList >::iterator itr = OrderQueue.find(val);
if(itr == OrderQueue.end())
{
QueueHolderList qHolder;
qHolder.push_back(new HolderClass());
}
else
{
itr->second.push(new TransactionHolder());
}
但是当我尝试使用pop_front(下面代码片段)删除元素时,它不删除元素,代码下面运行while循环并检查OrderQueue和每个val,如果size是grater则为零然后删除元素。
map<string, QueueHolderList>::iterator itr;
for(itr = OrderQueue.begin(); itr != OrderQueue.end(); itr++)
{
string gen2Aotag = itr->first;
HolderClass q = itr->second;
if(q.size() > 0)
{
for(int i = 0; i < q.size(); i++)
{
if(q.front())
{
.......... other code ............
delete q.front();
q.front() = NULL;
q.pop_front();
}
}
}
}
问题是当我重新迭代orderQue映射,然后找到相同的已删除项目列表(虽然使用pop_front删除)并导致seg错误,因为它指向一些垃圾位置并尝试使用该垃圾访问代码
我哪里出错了?或者我的apporach不正确?请帮我识别一下。
答案 0 :(得分:1)
您没有向map
添加任何内容。
map<string, QueueHolderList >::iterator itr = OrderQueue.find(val);
if(itr == OrderQueue.end())
{
QueueHolderList qHolder;
qHolder.push_back(new HolderClass());
// This adds an item to the object on the stack but not to the map.
// You need:
OrderQueue[val] = qHolder;
}
else
{
itr->second.push(new TransactionHolder());
}