【发布时间】:2011-11-13 01:48:13
【问题描述】:
使用擦除方法时,迭代器何时以及如何在映射中失效?
例如:
std :: map < int , int > aMap ;
aMap [ 33 ] = 1 ;
aMap [ 42 ] = 10000 ;
aMap [ 69 ] = 100 ;
aMap [ 666 ] = -1 ;
std :: map < int , int > :: iterator itEnd = aMap.lower_bound ( 50 ) ;
for ( std :: map < int , int > :: iterator it = aMap.begin ( ) ;
it != itEnd ;
// no-op
)
{
aMap.erase ( it ++ ) ;
}
被擦除的迭代器肯定会变得无效(它会在仍然有效时递增) 但是其他人呢?
如果我没记错的话,标准说映射必须是平衡的二叉树或具有等效键搜索复杂度的结构
如果地图是用树实现的,我可以假设未擦除的迭代器仍然有效吗?
还有其他可能的方法来实现地图吗?
【问题讨论】:
标签: c++ stl iterator std stdmap