如何删除stl< map>来自迭代器的元素? [英] How to delete stl<map> element from iterator?

查看:88
本文介绍了如何删除stl< map>来自迭代器的元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




在为地图制作迭代器并逐步完成循环后,我想

删除任何满足测试的条目外部函数。


MyMapType :: const_iterator iter;


for(iter = m-> begin(); iter!= m- > end(); ++ iter)

{

a = iter-> first;

b = iter-> second;

if(Test(a,b)== true)

iter-> delete?();

}


如何实际删除iter指向的元素?


谢谢


Steve

解决方案



" Steve Edwards" < gf*@lineone.net>在消息中写道

news:gf *********************** @ news.btinternet.com ...



在为地图制作迭代器并逐步完成循环之后,我想从外部函数中删除任何满足测试要求的条目。

MyMapType :: const_iterator iter;

for(iter = m-> begin(); iter!= m-> end(); ++ iter)


这假定''m''是指向地图的指针的名称,

不是地图本身。我会在下面保留这个假设。

{
a = iter-> first;
b = iter-> second;
if(Test( a,b)== true)
iter-> delete?();
}

如何实际删除iter指向的元素?



for(iter = m-> begin(); iter!= m-> end(); ++ iter)

{

如果(条件)

iter = m-> erase(iter);

}

一个很好的参考对于C ++标准库:
www.josuttis.com/libbook


-Mike


Steve Edwards写道:

制作迭代器后映射和逐步循环,我想从外部函数中删除任何满足测试的条目。

MyMapType :: const_iterator iter;

for( iter = m-> begin(); iter!= m-> end(); ++ iter)
{
a = i ter-> first;
b = iter-> second;
if(Test(a,b)== true)
iter-> delete?();
}

如何实际删除iter指向的元素?




您要求地图将其删除。


类似


m-> erase(iter);


请注意,之后删除''iter''变得无效。你不能在那之后再增加
。你可能想要像这样重写你的循环:


for(....;)//最后没有增量

{

a =

b =

if(..

m-> erase(iter ++);

else

++ iter;

}


V

-

请在邮寄回复时从我的地址中删除资金


" Victor Bazarov" v。******** @ comAcast。 net>写在消息中

news:mr ***************** @ newsread1.mlpsca01.us.to.verio.net ...

Steve Edwards写道:

我如何实际删除iter指向的元素?



你要求你的地图擦除它。

某些东西如

m->擦除(iter);

小心,但是,在删除''iter'后,它变得无效。之后你不能增加它。你可能想要重写y我们这样的循环:




嗯,我想我们都拙劣了回复。我忘记了

''else''部分,而你忽略了无效的迭代器。 :-)

for(....;)//最后没有增量
{
a =
b =
if(。 。
m-> erase(iter ++);


iter = m-> erase(iter);

else
++ iter;
}




-Mike


Hi,

After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.

MyMapType::const_iterator iter;

for(iter = m->begin(); iter != m->end(); ++iter)
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}

How do I actually delete the element that iter is pointing to?

Thanks

Steve

解决方案


"Steve Edwards" <gf*@lineone.net> wrote in message
news:gf***********************@news.btinternet.com ...

Hi,

After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.

MyMapType::const_iterator iter;

for(iter = m->begin(); iter != m->end(); ++iter)
This assumes that ''m'' is the name of a pointer to your map,
not of the map itself. I''ll keep that assumption below.
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}

How do I actually delete the element that iter is pointing to?



for(iter = m->begin(); iter != m->end(); ++iter)
{
if(condition)
iter = m->erase(iter);
}
An excellent reference for the C++ standard library:
www.josuttis.com/libbook

-Mike


Steve Edwards wrote:

After making an iterator to a map and stepping through a loop, I want to
delete any entries that satisfy a test from an external function.

MyMapType::const_iterator iter;

for(iter = m->begin(); iter != m->end(); ++iter)
{
a = iter->first;
b = iter->second;
if ( Test(a,b) == true)
iter->delete?();
}

How do I actually delete the element that iter is pointing to?



You ask your map to erase it.

Something like

m->erase(iter);

Beware, though, that after erasing the ''iter'' becomes invalid. You cannot
increment it after that. You might want to rewrite your loop like this:

for (.... ; ) // no increment at the end
{
a =
b =
if (..
m->erase(iter++);
else
++iter;
}

V
--
Please remove capital As from my address when replying by mail


"Victor Bazarov" <v.********@comAcast.net> wrote in message
news:mr*****************@newsread1.mlpsca01.us.to. verio.net...

Steve Edwards wrote:

How do I actually delete the element that iter is pointing to?



You ask your map to erase it.

Something like

m->erase(iter);

Beware, though, that after erasing the ''iter'' becomes invalid. You cannot
increment it after that. You might want to rewrite your loop like this:



Well, I think we both botched our replies. I forgot the
''else'' part, and yours disregards the invalid iterator. :-)

for (.... ; ) // no increment at the end
{
a =
b =
if (..
m->erase(iter++);
iter = m->erase(iter);
else
++iter;
}



-Mike


这篇关于如何删除stl&lt; map&gt;来自迭代器的元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆