unique函数

unique函数
unique函数用来去重,其原理是对序列中的元素遍历,如果相同的就让后面的往前覆盖。
例如: 1 3 3 4 5 5 6 7 -> 1 3 4 5 6 7 6 7,注意最后两个6 7还保留
函数原型:it = unique(a+1, a+n+1),返回值是最后一个前移覆盖的位置, 即1 3 4 5 6 7的位置。
注意:
调用unique前,记得要先排序。
如果要对结构体unique,要重载==方法

演示-unique
一、实验目标
对n个元素的数组,调用unique函数去重,输出变化后的数组。
输入样例1:
8
1 3 3 4 5 5 6 7
输出样例1:
6
1 3 4 5 6 7 6 7
数据范围:
1<=n<=10^5

#include <iostream>
#include <algorithm>
using namespace std;

const int N=1e5+5;
int n, a[N];

int main () {
  cin>>n;
  for(int i=1; i<=n; i++)
    cin>>a[i];
  int cnt = unique(a+1, a+n+1) - (a+1);
  cout<<cnt<<endl;
  for(int i=1; i<=n; i++)
    cout<<a[i]<<" ";
  cout<<endl;
  return 0;
}

演示-unique结构体
一、实验目标
对n个元素的结构体,调用unique函数去重,输出变化后的结构体信息,即映射数字和原数字。
结构体的元素:
struct Node {
int num;
int id;
};
输入样例1:
8
1 3 3 4 5 5 6 7
输出样例1:
6
1 3 4 5 6 7 6 7
数据范围:
1<=n<=10^5

#include <iostream>
#include <algorithm>
using namespace std;

struct Node {
  int num;
  int id;
  bool operator == (const Node &n1) const {
    return num == n1.num;
  }
};
const int N=1e5+5;
int n, a[N];
Node b[N];

int main () {
  cin>>n;
  for(int i=1; i<=n; i++) {
    cin>>a[i];
    b[i].num = a[i];
    b[i].id = i;
  }
  int cnt = unique(b+1, b+n+1) - (b+1);
  cout<<cnt<<endl;
  for(int i=1; i<=n; i++)
    cout<<b[i].num<<"("<<b[i].id<<") ";
  cout<<endl;
  return 0;
}

注意:一定要先排序在使用unique函数,unique函数在头文件#include

posted @ 2019-11-10 11:04  wased  阅读(1302)  评论(0编辑  收藏  举报