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里
原文地址:https://www.cnblogs.com/wased/p/11829184.html
时间: 2024-11-09 02:17:18