C++STL库中sort与unique函数

原因

最近要进行程设的期末考试了,复习STL的时候看到了sort和unique.
以前用的时候总觉得有些模糊,正好趁复习再巩固一下.

测试

#include 
using namespace std;

void print(int* a,int n)
{
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}

int main()
{
    //想要测试关于unique以及sort相关的函数
    //假定数据为1 1 2 6 5 1 1 4 7 5
    int a[]={1,1,2,6,5,1,1,4,7,5};
    int n=sizeof(a)/sizeof(int);
    print(a,n);                     //1 1 2 6 5 1 1 4 7 5
    int* end=unique(a,a+n);         //普通的unique只会去除相邻的重复项
    print(a,end-a);                 //1 2 6 5 1 4 7 5

    sort(a,a+n);                    //先对数据进行排序 时间复杂度O(nlogn)
    print(a,n);                     //1 1 1 1 2 4 5 5 6 7
    int* b=unique(a,a+n);           //对排序后的数据进行去重
    print(a,b-a);                   //1 2 4 5 6 7
}

结果分析

如果想要对一组数据进行去重操作

  • 如果顺序重要,可以直接使用unique函数,返回一个迭代器或者说指针指向末尾位置.
    但是只能做到去除相邻的重复项.
  • 如果顺序不重要,可以先对数据进行sort排序,然后将排序后的数据进行一个unique去重.
    通过返回的迭代器.

对应使用

C++STL库中sort与unique函数_第1张图片

上述题目来源于SDUOJ-CSP模测第三场

题解核心代码

#include 
using namespace std;
const int maxn=1e5;
int n,m;//count of Num and operation
int Nums[maxn];

void init()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
        cin>>Nums[i];
    int* b=unique(Nums,Nums+n);
    n=b-Nums;
}

void Operation()
{
    int temp,a,b;
    cin>>temp;
    if(temp==1)//operation 1
    {
        cin>>a>>b;//a->b
        for(int i=0;i<n;i++)
        {
            if(Nums[i]==a)
                Nums[i]=b;
        }
        int* end=unique(Nums,Nums+n);
        n=end-Nums;
    }
    if(temp==2)
    {
        cout<<n<<endl;
    }
}

int main()
{
    init();
    for(int i=0;i<m;i++)
        Operation();
    return 0;
}

你可能感兴趣的:(Little,Tips,c++,stl,csp)