map的erase方法

如果erase()总是返回下一元素的位置,那就可以像在vector容器中删除元素一样,如:

//     删除所有实值为2的元素

      map< int, int >::iterator itMap = mapInt.begin();

      for ( ; itMap != mapInt.end();   ) {

             if (  itMap->second == 2 ) {

                    itMap = mapInt.erase( itMap );

             }

             else {

                    ++itMap;

             }

      }

但是,注意,以上的方式只在vc使用P.J.STL中才能编译通过,而使用SGI STL库则编译不过,因为SGISTL库在设计中考虑到如果用户不需要这一特性,就会损失性能,因此否决了这种想法。所以要保证可移植性,最好采用下面的方法:

//       删除所有实值为2的元素

        map< int, int >::iterator itMap = mapInt.begin();

        for ( ; itMap != mapInt.end();  ) {

                  if (  itMap->second == 2 ) {

                           //         itMap++将使itMap指向下一个元素,但返回原迭代器的副本,所以

                           //         erase()被调用时,itMap不指向将要被删除的元素

                           mapInt.erase( itMap++ );

                  }

                  else {

                           ++itMap;

                  }

        }


ps:其实是windows下的stl和sgi stl关于earse的区别

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/rufeng18/archive/2007/12/21/1957836.aspx

posted on 2011-03-02 11:10  Ray_8686  阅读(1752)  评论(0编辑  收藏  举报