转:
STL—vector删除重复元素
STL提供了很多实用的算法,这里主要讲解sort和unique算法。
删除重复元素,首先将vector排序。
sort( vecSrc.begin(), vecSrc.end() );
然后使用unique算法。
vecSrc.erase( unique( vecSrc.begin(), vecSrc.end() ), vecSrc.end() );注意:此处并未使用循环,只一句话就删除了容器中所有相邻元素中重复的元素。
unique返回值是重复元素的开始位置。
如果vector中存储的元素是自定义的结构或者是类,那么就需要重载操作符。
根据类的某一个成员变量排序或者比较。
sort算法需要重载"<"操作符。
unique算法需要重载"=="操作符。
操作符重载的示例如下:
class CTest
……
public:
BOOL operator<( const CTest& oCompany ) const
{
return this->m_nCompanyId < oCompany.m_nCompanyId;
}
BOOL operator==( const CECompany& oCompany ) const
{
return this->m_nCompanyId == oCompany.m_nCompanyId;
}
}
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求
必须要求:
1、Copy构造函数
2、赋值=操作符
3、能够销毁对象的析构函数
另外:
1、可用的缺省构造函数,序列型容器必须,用于初始化元素
2、==操作符定义,用于判断相等
3、<操作符定义,关联型容器必须,用于缺省排序
你可在struct內加入 operator < ,就可以使struct有排序能力.
因為而你的pcd struct內沒有指針,所以不須要有copy constructor
和copy assignment, 編譯器會為你提供的, 你不須要自己做的.
當你要排序時只要寫 sort( obj.begin(), obj.end() )就可.
ref:
http://bbs.csdn.net/topics/40228627
http://blog.csdn.net/tigernana/article/details/7293758
http://blog.csdn.net/guang11cheng/article/details/7556697