• stl 自定义排序与删除重复元素


     转:

    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;
        }

    }

    c++中vector自定义排序的问题

    如果要自己定义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

  • 相关阅读:
    CADisplayLink
    对项目重命名
    TCP|UDP|Http|Socket
    CoreAnimation|动画
    Autolayout
    通讯录
    本地通知
    用于做 Android 屏幕自适应的文章资源
    Java String.format 自动补全不够的位数
    不同语言之间 日期格式转换
  • 原文地址:https://www.cnblogs.com/cslxiao/p/3508357.html
Copyright © 2020-2023  润新知