map, set, vector erase的正确使用方法
一、erase 的用法区别
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);
另一类是以不连续的节点形式存储的容器(如:list、set、map)。
在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃。
在使用 list、set 或 map遍历删除某些元素时可以这样使用
std::list< int> List;
auto it = List.begin();
while(it != List.end()) { if( FIND( *itList) ) { List.erase( itList++); } else itList++; }
在使用 vector、deque遍历删除元素时,也可以通过erase的返回值来获取下一个元素的位置:
std::vector< int> Vec; std::vector< int>::iterator itVec; for( itVec = Vec.begin(); itVec != Vec.end(); ) { if( FIND( *itVec) ) { itVec = Vec.erase( itVec); } else itList++; }
二、排序sort 的区别
list容器有自己的sort函数,如:
list<stContact> lst; lst.sort([](const stContact& a, const stContact& b) {return a.callCount > b..callCount; });
vector等容器,需使用 std::sort算法
vector<stContact> vec; std::sort(vec.begin(), vec.end(), [](const stContact& a, const stContact& b){return a.callCount > b.callCount;});