我有一个 map<string, vector<record>>,如何从 vector<record> 中删除记录?
Posted
技术标签:
【中文标题】我有一个 map<string, vector<record>>,如何从 vector<record> 中删除记录?【英文标题】:I have a map<string, vector<record>>, how to remove records from vector<record>? 【发布时间】:2011-03-15 16:38:08 【问题描述】:我已经尝试了所有可能的方法,但未能找到解决方案。请帮忙
我想在遍历地图时删除矢量中的记录。
map < string, vector < record> >::iterator map_it;
for(map_it = map_records.begin(); map_it != map_records.end(); ++map_it)
vector < record>::iterator vec_it;
for(vec_it = (*map_it).second.begin(); vec_it != (*map_it).second.end();)
if(condition)
cout << (*map_it).second.size() << endl;
vec_it = map_it->second.erase(vec_it);
cout << (*map_it).second.size()<< endl;
else
++vec_it;
我试过这样的方法,(*map_it).second.erase(vec_it)
如果我查询它的大小并且程序以分段错误结束,它会给出一些长数字
输出: 18446744073709551615 18446744073709551615 分段错误
任何帮助表示赞赏
【问题讨论】:
【参考方案1】: vec_t = map_it->second.erase(vec_it); //note the assignment!
您还需要立即检查它的有效性,因此最好将内部循环重写为:
for(vec_it = (*map_it).second.begin(); vec_it != (*map_it).second.end(); )
if(condition)
vec_it = map_it->second.erase(vec_it);
else
++vec_it;
【讨论】:
@Ringo:如果您遇到一些错误。然后问题出在其他地方,不再在这个循环中。你为什么不把错误信息也贴出来? @Ringo:你也在for
中做++vec_it
吗?你注意到我没有这样做吗?我的代码只在一个地方增加它!
错误是 18446744073709551615 18446744073709551615 分段错误我只是在条件失败时递增。
@Ringo:你增加了两次吗?也发布您当前正在使用的 for
循环!
这是我的代码中的一个错误。擦除矢量项的方法是正确的。感谢帮助。特别感谢nawaz..【参考方案2】:
您正在使您的迭代器无效。如果您要在迭代时从向量中擦除对象,您应该确保获取擦除的返回值(它是下一个迭代器的迭代器) object 或 vector::end) 并将迭代器设置为该值,否则它将变得无效并且您的程序可能会崩溃。
if(condition)
vec_it = map_it->second.erase(vec_it);
//added for completeness
//if the for loop has a ++vec_it, we should break before
//it gets to do it on an end iterator
if(vec_it == map_it->second.end())
break;
【讨论】:
【参考方案3】:不要在向量上使用条件擦除,而是使用std::remove_if
。然后erase
成语。它会更快,因为它不会多次移动向量的所有元素。
【讨论】:
【参考方案4】:在有条件的情况下,你可以这样做:
vec_it = (*map_it).second.erase( vec_it );
它会删除地图中该迭代器位置的项目。
More Info on C++ Vector::Erase()
【讨论】:
你打电话的不是地图擦除! 哈哈哈哈哈。哈哈哈哈。哎呀。 >.>以上是关于我有一个 map<string, vector<record>>,如何从 vector<record> 中删除记录?的主要内容,如果未能解决你的问题,请参考以下文章
我有一个 map<string, vector<record>>,如何从 vector<record> 中删除记录?
我有两个list,list里面放的是map,我现在需要遍历这两个list,将里面存放的map中key相等的value值相加