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里

原文地址:https://www.cnblogs.com/wased/p/11829184.html

时间: 2024-11-09 02:17:18

unique函数的相关文章

matlab 基础 unique函数与ismember函数

(1)unique函数 函数格式: b = unique (a)             %取集合a的不重复元素构成的向量: b = unique (A,'rows')   %返回A.B不同行元素组成的矩阵: [b,i,j] = unique (-)      %其中 i 体现b中元素在原向量(矩阵a)中的位置:j体现原向量(矩阵a)在b中的位置: 代码: >> A=[1 2 3;4 5 6;7 8 9;1 2 3;5 5 5;6 6 6;6 7 8] A = 1 2 3 4 5 6 7 8

unique函数的作用

unique() 去重函数 unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件要加#include<iostream.h>: 具体用法如下: int num[100]; unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后

Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)

传送门 在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习. unique函数 在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序. STL中关于二分查找的函数有三个lower_

unique函数去除重复元素在vector中的应用

 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<vector> #include<algorithm> #include<iostream> using namespace std; int main() { int a[10]={1,7,4,1,7,4,1,7,4,0}; sort(a,a+10); vector<int> ver(a

Matlab中bsxfun和unique函数解析

一.问题来源 来自于一份LSH代码,记录下来. 二.函数解析 2.1 bsxfun bsxfun是一个matlab自版本R2007a来就提供的一个函数,作用是”applies an element-by-element binary operation to arrays a and b, with singleton expansion enabled. 函数用在两个数组间元素逐个计算.比如当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只

C++中的unique函数

转自:https://blog.csdn.net/tomorrowtodie/article/details/51907471 unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序 n = unique(a,a+n) - a; 上面的一个使用中已经给出该函数的一个使用方法,对于长度为n数组a,unique(a,a+n) - a返回的是去重后的数组长度 那它是怎么实现去重的呢?删除? 不是,它并没有将重复的元素删除,而是把重复的元素放

【整理】C++中的unique函数

之前总结了一下我觉得有用的erase,lower_bound,upper_bound. 现在总结一下unique,unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址,下面举个例子. 由于返回的是容器末尾,所以如果想得到去重后的size,需要减去初始地址,lower_bound是得到地址,稍微不同. 如: sz = unique(b + 1,b + n + 1)-(b + 1); sz =

unique() 去重函数

unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数,所以头文件要加#include<iostream.h>,具体用法如下: int num[100]; unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不真正把重复的元素删除,其实是,该函数把重复的元素一到后面去了,然后依然保存到了原数组中,然后返回去重后最后一个元素的地址,因为uni

c++ STL unique , unique_copy函数

一.unique函数 类属性算法unique的作用是从输入序列中"删除"全部相邻的反复元素. 该算法删除相邻的反复元素.然后又一次排列输入范围内的元素,而且返回一个迭代器(容器的长度没变,仅仅是元素顺序改变了),表示无反复的值范围得结束. // sort words alphabetically so we can find the duplicates sort(words.begin(), words.end()); /* eliminate duplicate words: *