精华内容
下载资源
问答
  • unique函数
    2022-06-14 11:41:12

    unique函数是C++STL容器中一个非常实用的函数,它可以用来对数组进行去重,非常的实用,我们通常把它用在sort()函数排序之后,它可以返回这个数列的最后一个

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int main()
    {
    	int a[10]={1,1,1,2,2,3,8,7,8,9};
    	sort(a,a+10);
    	for(int i=0;i<10;i++)
    		cout<<a[i]<<" ";
    	cout<<endl;
    	int cnt=unique(a,a+10)-a;
    	cout<<cnt<<endl;
    	for(int i=0;i<cnt;i++)
    		cout<<a[i]<<" ";
    	return 0;
    }
    
    "unique"是C++语言中的STL函数,包含于<algorithm>头文件中。功能是将数组中相邻的重复元素去除。然而其本质是将重复的元素移动到数组的末尾,最后再将迭代器末尾指向最后不重复的下标。
    

    所以要先让容器变成有序的才可以。

    用法:unique(数组名,数组名+长度),类似于sort(a,a+n)这样的操作。

    时间复杂度单从unique来说是O(n),但是再加上之前的排序,就变成了O(nlogn);

    unique() 函数一般是用来作为去重的函数的,例如:

    vector alls;//存储所有数的值;

    sort(alls.begin(),alls.end());//将所有的值排序

    alls.erase(unique(alls.begin(),alls.end()),alls.end()); //去重;
    原文链接:https://blog.csdn.net/ftyykil/article/details/117386173

    更多相关内容
  • unique是STL比较实用的一个函数。用于“去除”容器内相邻的重复的元素(只保留一个)。这里说的去除并不是真正将容器内的重复元素删去,只是把重复的元素移到容器最后,但是依然在容器内。 对于数组而言返回去重后...
  • Unique函数Unique函数用法

    千次阅读 2019-07-31 11:57:41
    unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它...

    unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。

    二.函数原型

    unique函数的函数原型如下:

    1.只有两个参数,且参数类型都是迭代器:

     

    iterator unique(iterator it_1,iterator it_2);
    

     

    这种类型的unique函数是我们最常用的形式。其中这两个参数表示对容器中[it_1,it_2)范围的元素进行去重(注:区间是前闭后开,即不包含it_2所指的元素),返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素

    2.有三个参数,且前两个参数类型为迭代器,最后一个参数类型可以看作是bool类型:

    iterator unique(iterator it_1,iterator it_2,bool MyFunc);
    

    该类型的unique函数我们使用的比较少,其中前两个参数和返回值同上面类型的unique函数是一样的,主要区别在于第三个参数。这里的第三个参数表示的是自定义元素是否相等。也就是说通过自定义两个元素相等的规则,来对容器中元素进行去重。这里的第三个参数与STL中sort函数的第三个参数功能类似(关于sort函数:http://www.cnblogs.com/wangkundentisy/p/8982180.html)。关于第三个参数的详细介绍,可以参考:http://www.cplusplus.com/reference/algorithm/unique/

    三.函数用法实例

      上面介绍了unique函数的功能和原型,那么,它到底是如何进行去重的呢?即“删除”的具体操作是怎样的呢?

    关于这个问题,http://www.cplusplus.com/reference/algorithm/unique/给了我们一种解释,即unique函数是完全等价于下面这个函数的:

    iterator My_Unique (iterator first, iterator last)
    {
      if (first==last) return last;
    

    iterator result = first;
    while (++first != last)
    {
    if (!(*result == *first))
    *(++result)=*first;
    }
    return ++result;
    }

    分析这段代码,我们可以知道,unique函数的去重过程实际上就是不停的把后面不重复的元素移到前面来,也可以说是用不重复的元素占领重复元素的位置。有了这段代码我们可以结合实例来更好的理解这个函数了。

    实例:

    #include<iostream>
    #include<algorithm>
    #include<cassert>

    using namespace std;
    
    static bool myfunc(int i, int j)
    {
    return (i + 1) == j;
    //return i == j;
    }
    

    int main(){

    vector<int> a = {1,3,3,4,5,6,6,7};
    vector<int>::iterator it_1 = a.begin();
    vector<int>::iterator it_2 = a.end();

    //sort(it_1,it_2);
    cout<<"去重前的 a : ";
    for(int i = 0 ; i < a.size(); i++)
    cout<<a[i];
    cout<<endl;
    //it_h = unique(it_1,it_2);
    //unique(it_1,it_2,myfunc);
    unique(it_1,it_2);
    cout<<"去重后的 a : ";
    for(int i = 0 ; i < a.size(); i++)
    cout<<a[i];
    cout<<endl;
    }

      

    运行结果如下:

    对于上面的结果,我们可以看到,容器中不重复的元素都移到了前面,至于后面的元素,实际上并没有改变(这个过程只需结合My_Unique函数来分析即可)。

    注:

    1.有很多文章说的是,unique去重的过程是将重复的元素移到容器的后面去,实际上这种说法并不正确,应该是把不重复的元素移到前面来。

    2.一定不要忘记的是,unique函数在使用前需要对容器中的元素进行排序(当然不是必须的,但我们绝大数情况下需要这么做),由于本例中的元素已经是排好序的,所以此处我没排序,但实际使用中不要忘记。

    四.用法拓展

     1.我们以上的实例针对的是函数原型1的用法,对于函数原型2,我们仍然使用上述实例,只不过unique的用法变成:

    unique(it_1,it_2,myfunc);
    

    即自定义的元素相等的准则,其中myfunc在上述实例中有其源码,分析可知,只有i+1 == j的时候我们才认为i和j“相等”;实例结果如下:

    也就是说,按照我们自定义的规则,这个实例中只有3和4”相等的”,4和5是”相等的”,5和6,6和7是”相等的”。所以最终结果是上图的样子。

    2.unique函数通常和erase函数一起使用,来达到删除重复元素的目的。(注:此处的删除是真正的删除,即从容器中去除重复的元素,容器的长度也发生了变换;而单纯的使用unique函数的话,容器的长度并没有发生变化,只是元素的位置发生了变化)关于erase函数的用法,可以参考:http://www.cnblogs.com/wangkundentisy/p/9023977.html。下面是一个具体的实例:

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

    int main()
    {

    vector<int> a ={1,3,3,4,5,6,6,7};
    vector<int>::iterator it_1 = a.begin();
    vector<int>::iterator it_2 = a.end();
    vector<int>::iterator new_end;

    new_end = unique(it_1,it_2); //注意unique的返回值
    a.erase(new_end,it_2);
    cout<<"删除重复元素后的 a : ";
    for(int i = 0 ; i < a.size(); i++)
    cout<<a[i];
    cout<<endl;

    }

    运行结果如下:

    可以看到,相比之前的结果,a的长度确实发生了改变,真正的删除了a中的重复元素。

     

    展开全文
  • STL函数——unique函数

    2021-09-03 21:53:13
    unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它...

    一、函数定义

    unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。

    二.函数原型

    unique函数的函数原型如下:

    1.只有两个参数,且参数类型都是迭代器:

    1

    iterator unique(iterator it_1,iterator it_2);

    这种类型的unique函数是我们最常用的形式。其中这两个参数表示对容器中[it_1,it_2)范围的元素进行去重(注:区间是前闭后开,即不包含it_2所指的元素),返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素

    2.有三个参数,且前两个参数类型为迭代器,最后一个参数类型可以看作是bool类型:

    1

    iterator unique(iterator it_1,iterator it_2,bool MyFunc);

    该类型的unique函数我们使用的比较少,其中前两个参数和返回值同上面类型的unique函数是一样的,主要区别在于第三个参数。这里的第三个参数表示的是自定义元素是否相等。也就是说通过自定义两个元素相等的规则,来对容器中元素进行去重。这里的第三个参数与STL中sort函数的第三个参数功能类似(关于sort函数:http://www.cnblogs.com/wangkundentisy/p/8982180.html)。关于第三个参数的详细介绍,可以参考:http://www.cplusplus.com/reference/algorithm/unique/

    三.函数用法实例

      上面介绍了unique函数的功能和原型,那么,它到底是如何进行去重的呢?即“删除”的具体操作是怎样的呢?

    关于这个问题,http://www.cplusplus.com/reference/algorithm/unique/给了我们一种解释,即unique函数是完全等价于下面这个函数的:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    iterator My_Unique (iterator first, iterator last)

    {

      if (first==last) return last;

      iterator result = first;

      while (++first != last)

      {

        if (!(*result == *first)) 

          *(++result)=*first;

      }

      return ++result;

    }

    分析这段代码,我们可以知道,unique函数的去重过程实际上就是不停的把后面不重复的元素移到前面来,也可以说是用不重复的元素占领重复元素的位置。有了这段代码我们可以结合实例来更好的理解这个函数了。

    实例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    #include<iostream>

    #include<algorithm>

    #include<cassert>

    using namespace std;

    static bool myfunc(int i, int j)

    {

        return (i + 1) == j;

        //return i == j;

    }

    int main()

    {

        vector<int> a = {1,3,3,4,5,6,6,7};

        vector<int>::iterator it_1 = a.begin();

        vector<int>::iterator it_2 = a.end();

        //sort(it_1,it_2);

        cout<<"去重前的 a : ";

        for(int i = 0 ; i < a.size(); i++)

            cout<<a[i];

        cout<<endl;

        //it_h = unique(it_1,it_2);

        //unique(it_1,it_2,myfunc);

        unique(it_1,it_2);

        cout<<"去重后的 a : ";

        for(int i = 0 ; i < a.size(); i++)

            cout<<a[i];

        cout<<endl;

    }

    运行结果如下:

    对于上面的结果,我们可以看到,容器中不重复的元素都移到了前面,至于后面的元素,实际上并没有改变(这个过程只需结合My_Unique函数来分析即可)。

    注:

    1.有很多文章说的是,unique去重的过程是将重复的元素移到容器的后面去,实际上这种说法并不正确,应该是把不重复的元素移到前面来。

    2.一定不要忘记的是,unique函数在使用前需要对容器中的元素进行排序(当然不是必须的,但我们绝大数情况下需要这么做),由于本例中的元素已经是排好序的,所以此处我没排序,但实际使用中不要忘记。

    四.用法拓展

     1.我们以上的实例针对的是函数原型1的用法,对于函数原型2,我们仍然使用上述实例,只不过unique的用法变成:

    1

    unique(it_1,it_2,myfunc);

    即自定义的元素相等的准则,其中myfunc在上述实例中有其源码,分析可知,只有i+1 == j的时候我们才认为i和j“相等”;实例结果如下:
     

    也就是说,按照我们自定义的规则,这个实例中只有3和4”相等的”,4和5是”相等的”,5和6,6和7是”相等的”。所以最终结果是上图的样子。

    2.unique函数通常和erase函数一起使用,来达到删除重复元素的目的。(注:此处的删除是真正的删除,即从容器中去除重复的元素,容器的长度也发生了变换;而单纯的使用unique函数的话,容器的长度并没有发生变化,只是元素的位置发生了变化)关于erase函数的用法,可以参考:http://www.cnblogs.com/wangkundentisy/p/9023977.html。下面是一个具体的实例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    #include<iostream>

    #include<algorithm>

    #include<cassert>

    using namespace std;

    int main()

    {

        vector<int> a ={1,3,3,4,5,6,6,7};

        vector<int>::iterator it_1 = a.begin();

        vector<int>::iterator it_2 = a.end();

        vector<int>::iterator new_end;

        new_end = unique(it_1,it_2); //注意unique的返回值

        a.erase(new_end,it_2);

        cout<<"删除重复元素后的 a : ";

        for(int i = 0 ; i < a.size(); i++)

            cout<<a[i];

        cout<<endl;

    }

    运行结果如下:

    可以看到,相比之前的结果,a的长度确实发生了改变,真正的删除了a中的重复元素。

    展开全文
  • unique函数详解

    2022-03-02 15:48:27
    unique函数是去除相邻的相同的元素,最后返回的是结尾的指针。 例子: 这三个1都是相邻的,故删除后只有一个1。 例子: 这里是没变的,因为相同的1并未相邻。

    unique函数是去除相邻的相同的元素,最后返回的是结尾的指针。

    例子:

    这三个1都是相邻的,故删除后只有一个1。

    例子:
    在这里插入图片描述
    这里是没变的,因为相同的1并未相邻。

    展开全文
  • 关于unique函数

    千次阅读 2021-11-23 16:08:10
    torch和numpy中都有unique函数,作用是去除张量/向量组中的重复张量/向量。 torch torch.unique(input, sorted=True, return_inverse=False, return_counts=False, dim=None) 可以看到有 return_inverse和...
  • matlab unique函数

    千次阅读 2021-03-25 20:30:01
    格式b = unique (a)%取集合a的不重复元素构成的向量 b = unique (A,'rows')%返回A、B不同行元素组成的矩阵 [b,i,j] = unique (…)%i体现b中元素在原向量(矩阵a)中的位置;j体现原向量(矩阵a)在b中的位置 例1-39 ...
  • unique函数用法

    千次阅读 2021-05-06 10:47:30
    unique函数用法 unique包含在头文件 #include <algorithm> 函数作用:“去除”容器或数组中相邻元素之间重复出现的元素 unique函数的三个参数: 1、想要去重的数据集的起始地址 2、想要去重的最后一个元素的...
  • unique函数

    千次阅读 2019-01-25 16:13:58
    在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,...
  • numpy_unique函数

    2021-12-31 17:21:55
      numpy的unique函数用于输出数组中不同的值。 import numpy as np a = np.unique([1, 1, 2, 2, 3, 3]) b = np.array([[1, 1], [2, 3]]) b = np.unique(b) print("a =", a) print("b =", b) 执行结果: a = [1 2...
  • c++中unique函数

    2021-11-07 15:10:38
    1、使用需要引入#include<algorithm> 2、作用:去除容器中相邻重复元素,但是这是一个伪去重,它会把重复的元素... //因为unique函数返回值为第一个重复元素的下标,因而清除该返回地址到容器结尾中的元素即可。
  • unique 函数 详解

    万次阅读 多人点赞 2019-02-17 21:03:58
    unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它...
  • C = unique(A):返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。示例:1.筛除向量中的重复值,产生的结果按升序排列Define a vector with a repeated value.A = [9 2 9 5];Find the unique ...
  • STL中的unique函数

    2021-09-16 10:21:40
    unique是STL中一个比较实用而且非常常用的函数之一了; 作用就是容器或数组去重,但是并不是完全的去重;它只是把重复的元素放在了容器的后面,而且去重前一定要先排序; 头文件:#include<algorithm> 特点: ...
  • C++ Unique函数 详细

    千次阅读 2019-05-14 12:07:45
    unique函数是STL中比较实用的函数之一 包含该函数的函数头文件为 #include <algorithm> 2 unique函数可以删除有序数组中的重复元素。 注意: a 这里的删除不是真的delete,而是将重复的元素放到容器末尾 b ...
  • matlab中的unique函数(数组中的唯一值) 常用的几个unique函数如下: C = unique(A); [C, ia, ic] = unique(A); [C,ia,ic] = unique(A,‘rows’); [C,ia,ic] = unique(A(:,1:2),‘rows’); 如果 A 是向量,则 C ...
  • STL的unique函数返回值

    千次阅读 2020-06-25 13:05:07
    unique:使具有连续相同值的对象只留一份,由s与e迭代器来指定处理范围,并返回压缩后的序列末尾的迭代器 #include<iostream> #include<algorithm> #include<vector> using namespace std; int ...
  • unique函数基础讲解

    2020-08-28 20:34:15
    unique函数的参数是迭代器,也可以在数组中实现,本质还是类似迭代器。 一般用法: sort(a,a+n);//先排序 unique(a,a+n); 或者 unique(a.begin(),a.end()); 实现了除重操作,把不重复的数排在了前面,重复的数排在了...
  • Python numpy.unique函数方法的使用

    千次阅读 2020-12-21 05:09:10
    numpy.uniquenumpy.unique(ar, return_index=False, return_inverse=False, return_counts=False, axis=None) [source]查找数组的唯一(unique)元素。返回数组的排序后的唯一元素。 除独特元素外,还有三个可选输出:...
  • python | pandas:unique函数

    千次阅读 2021-11-30 16:19:05
    作用:unique()函数用于获取Series对象的唯一值。 唯一性按出现顺序返回。基于哈希表的唯一,因此不排序 语法:Series.unique(self) 返回:ndarray 或 ExtensionArray作为 NumPy 数组返回的唯一值。 注意:以 ...
  • c++ unique函数详解

    千次阅读 2019-07-10 15:42:10
    unique是 c++标准模板库STL中十分实用的函数之一,使用此函数需要#include <algorithm>头文件 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素 (1) 这里的去除并非真正意义的erase,而是将...
  • Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的...原文地址:Python pandas.DataFrame.nunique函数方法的使用 ...
  • C++中uniqueuniqueunique函数的使用。 对数组中相邻的重复元素实现“去重"。 一般都是对排好序的数组"去重". 这里的去重是指将不重复的元素...若数组从0开始则不重复序列的大小为unique(a,a+sizetot)−aunique(a,a+size
  • R语言unique函数计算数据对象(vector、dataframe)的unique独特值:unique函数从vector向量、dataframe中删除重复项、删除dataframe重复行
  • unique函数 对于一维数组(元组)或列表,unique函数去除其中重复的元素,并按元素由小到大的顺序返回一个新的无重复元素列表 import numpy as np A = [1, 2, 2, 5, 3, 4, 4] #列表 a = np.unique(A) B = (1, 2, 2,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 221,091
精华内容 88,436
关键字:

unique函数

友情链接: datasheet.zip