精华内容
参与话题
问答
  • unique , unique_copy函数

    2015-03-12 15:07:53
    一.unique函数 类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),...

    一.unique函数

    类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素

    该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值范围得结束。

    复制代码
     1 // sort words alphabetically so we can find the duplicates 
     2 sort(words.begin(), words.end()); 
     3      /* eliminate duplicate words: 
     4       * unique reorders words so that each word appears once in the 
     5       *    front portion of words and returns an iterator one past the 
     6 unique range; 
     7       * erase uses a vector operation to remove the nonunique elements 
     8       */ 
     9  vector<string>::iterator end_unique =  unique(words.begin(), words.end()); 
    10  words.erase(end_unique, words.end());
    复制代码
    在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为unique去除的是相邻的重复元素,所以一般用之前都会要排一下序。

    若调用sort后,vector的对象的元素按次序排列如下:

    sort  jumps  over quick  red  red  slow  the  the turtle

    则调用unique后,vector中存储的内容是:

     

     

     

     

     

     

    注意,words的大小并没有改变,依然保存着10个元素;只是这些元素的顺序改变了。调用unique“删除”了相邻的重复值。给“删除”加上引号是因为unique实际上并没有删除任何元素,而是将无重复的元素复制到序列的前段,从而覆盖相邻的重复元素。unique返回的迭代器指向超出无重复的元素范围末端的下一个位置。

    注意:算法不直接修改容器的大小。如果需要添加或删除元素,则必须使用容器操作。

    example:

     

    复制代码
     1 #include <iostream>
     2 #include <cassert>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <string>
     6 #include <iterator>
     7  using namespace std;
     8 
     9  int main()
    10 {
    11     //cout<<"Illustrating the generic unique algorithm."<<endl;
    12     const int N=11;
    13     int array1[N]={1,2,0,3,3,0,7,7,7,0,8};
    14     vector<int> vector1;
    15     for (int i=0;i<N;++i)
    16         vector1.push_back(array1[i]);
    17 
    18     vector<int>::iterator new_end;
    19     new_end=unique(vector1.begin(),vector1.end());    //"删除"相邻的重复元素
    20     assert(vector1.size()==N);
    21 
    22     vector1.erase(new_end,vector1.end());  //删除(真正的删除)重复的元素
    23     copy(vector1.begin(),vector1.end(),ostream_iterator<int>(cout," "));
    24     cout<<endl;
    25 
    26     return 0;
    27 }
    复制代码

     

    运行结果为:

     

     

    二、unique_copy函数

    算法标准库定义了一个名为unique_copy的函数,其操作类似于unique。

    唯一的区别在于:前者接受第三个迭代器实参,用于指定复制不重复元素的目标序列。

    unique_copy根据字面意思就是去除重复元素再执行copy运算。

    编写程序使用unique_copy将一个list对象中不重复的元素赋值到一个空的vector对象中。

    复制代码
     1 //使用unique_copy算法
     2 //将一个list对象中不重复的元素赋值到一个空的vector对象中
     3 #include<iostream>
     4 #include<list>
     5 #include<vector>
     6 #include<algorithm>
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     int ia[7] = {5 , 2 , 2 , 2 , 100 , 5 , 2};
    12     list<int> ilst(ia , ia + 7);
    13     vector<int> ivec;
    14 
    15     //将list对象ilst中不重复的元素复制到空的vector对象ivec中
    16     //sort(ilst.begin() , ilst.end());  //不能用此种排序,会报错
    17     ilst.sort();  //在进行复制之前要先排序,切记
    18     unique_copy(ilst.begin() , ilst.end() , back_inserter(ivec));
    19 
    20     //输出vector容器
    21     cout<<"vector: "<<endl;
    22     for(vector<int>::iterator iter = ivec.begin() ; iter != ivec.end() ; ++iter)
    23         cout<<*iter<<" ";
    24     cout<<endl;
    25 
    26     return 0;
    27 }
    复制代码

     假如

    list<int> ilst(ia , ia + 7);
    改为:vector<int> ilst(ia , ia + 7);

    则排序时可用:

    sort(ilst.begin() , ilst.end());

     这里要注意list和vector的排序用什么方法。

    《Effective STL》里这些话可能有用处:
    item 31
      
      “我们总结一下你的排序选择:
       ● 如果你需要在vector、string、deque或数组上进行完全排序,你可以使用sort或stable_sort。
       ● 如果你有一个vector、string、deque或数组,你只需要排序前n个元素,应该用partial_sort
       ● 如果你有一个vector、string、deque或数组,你需要鉴别出第n个元素或你需要鉴别出最前的n个元素,而不用知道它们的顺序,nth_element是你应该注意和调用的。
       ● 如果你需要把标准序列容器的元素或数组分隔为满足和不满足某个标准,你大概就要找partition或stable_partition。
       ● 如果你的数据是在list中,你可以直接使用partition和stable_partition,你可以使用list的sort来代替sort和stable_sort。如果你需要partial_sort或nth_element提供的效果,你就必须间接完成这个任务,但正如我在上面勾画的,会有很多选择。
      
      另外,你可以通过把数据放在标准关联容器中的方法以保持在任何时候东西都有序。你也可能会考虑标准非STL容器priority_queue,它也可以总是保持它的元素有序。
    展开全文
  • matlab中的unique

    万次阅读 2014-04-14 23:17:40
    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。...1、b = unique(A) 返回的是和A中一样的值...

    随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、QQ技术交流群(183198395)。

    向量中的那些唯一的元素

    语法

    b = unique(A)
    b = unique(A,'rows')
    [b,m,n] = unique(...)

    描述

    1、b = unique(A)  返回的是和A中一样的值,但是没有重复元素。产生的结果向量按升序排序。A可以是一个字符串的单元阵列。

    2、b = unique(A,'rows')  返回的是A中的唯一的行数。

    3、[b,m,n] = unique(...)  也返回索引向量m和n,使得B = A(M)和A= B(N)。m的每一个元素是最大的下标,使得B = A(M)。对于行的组合,B = A(M,:)和A= B(N,:)。

    示例

    A = [1 1 5 6 2 3 3 9 8 6 2 4]
    A =
    1     1     5     6     2     3     3     9     8     6     2     4

    [b,m,n] = unique(A)
    b =
          1     2     3     4     5     6     8     9
    m =
          2    11     7    12     3    10     9     8
    n =
    1     1     5     6     2     3     3     8     7     6     2     4

    A(m)
    ans =
          1     2     3     4     5     6     8     9

    b(n)
    ans =
    1     1     5     6     2     3     3     9     8     6     2     4

    因为NaN是互不相等的,把他们作为独特的元素对待

    unique([1 1 NaN NaN])
    ans =
         1 NaN NaN

    展开全文
  • vector有关unique以及sort

    2018-03-07 01:26:49
    问题在k为0时,我打算用sort、unique将前面的非重复部分erase掉,但在实现时发现{-1,-1,-1, 0, 1, 3}执行过后就变成了{-1, 0, 1, 3,1,3},是否跟内存分配有关? #include #include #include using namespace std...
  • STL中的sort和unique函数

    2014-12-20 05:49:02
    编了一个小程序,对STL算法中的sort()和unique()进行了测试,发现unique()输出结果不正确。程序如下: ``` #include #include #include using namespace std; int main() { int array[8]={1,5,4,5,3,100,2,100...
  • 可现在不管我 把 unique=true 和 unique=false 都不起作用。 [code="java"] @Column(nullable = false, length = 20, unique = false) public String getRolename() { return rolename; }[/code] 或 ...
  • unique,unique_if,unique_copy

    2012-07-29 15:19:21
    //unique,unique_if #include #include #include #include #include using namespace std; int main(){ int a[]={1,2,3,4,5,1,2,3,4,5}; vectorv(a,a+10); vectorvv(a,a+10); //unique是用来删除连续

    代码如下:

    //unique,unique_if
    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;
    int main(){
    	int a[]={1,2,3,4,5,1,2,3,4,5};
    	vector<int>v(a,a+10);
    	vector<int>vv(a,a+10);
    	//unique是用来删除连续重复的元素的,所以调用之前一定要先排序
    	sort(v.begin(),v.end());
    	vector<int>::iterator it=unique(v.begin(),v.end());//只是把重复的元素放在后面 而没有删除,这个时候试着去手动删除
    	copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
    	cout<<endl;
    
    	v.erase(it,v.end()); //进行手动删除
    	for(vector<int>::iterator iter=v.begin();iter!=v.end();++iter){//这个时候答案醒目多了
    		cout<<*iter<<" ";
    	}
    	cout<<endl;
    
    	sort(vv.begin(),vv.end());
    	vector<int>::iterator vit=unique(vv.begin(),vv.end(),less<int>());
    	copy(vv.begin(),vv.end(),ostream_iterator<int>(cout," "));
    	cout<<endl;
    	vv.erase(vit,vv.end());
    	for(vector<int>::iterator itera=vv.begin();itera!=vv.end();++itera){
    		cout<<*itera<<" ";
    	}
    	cout<<endl;
    	system("pause");
    	return 0;
    }
    
    //unique_copy 
    #include<iostream>
    #include<string>
    #include<vector>
    #include<algorithm>
    #include<functional>
    using namespace std;
    bool xiangchayi(int a,int b){
    	return a+1==b||a-1==b;
    }
    int main(){
    	int a[]={1,2,3,4,5,1,2,3,4,5};
    	vector<int>v(a,a+10);
    	vector<int>vv(a,a+10);
    	sort(v.begin(),v.end());
    	unique_copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
    	cout<<endl;
    
    	sort(vv.begin(),vv.end());
    	unique_copy(vv.begin(),vv.end(),ostream_iterator<int>(cout," "),xiangchayi);
    	cout<<endl;
    	system("pause");
    	return 0;
    }
    
    #include<iostream>
    #include<algorithm>
    #include<functional>
    #include<string>
    using namespace std;
    bool bothspace(char a,char b){
    	return a==' '&&b==' ';//连续两个空格的时候 返回真
    }
    int main(){
    	
    	cin.unsetf(ios::skipws);
    	unique_copy(istream_iterator<char>(cin),istream_iterator<char>(),ostream_iterator<char>(cout),bothspace);
    	system("pause");
    	return 0;
    }


     

    展开全文
  • 好久没刷题了,今天来俩道简单题。 Leetcode 62.... Unique Paths IIA robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below). The robot can only move either

    好久没刷题了,今天来俩道简单题。

    Leetcode 62. Unique Paths
    Leetcode 63. Unique Paths II

    A robot is located at the top-left corner of a m x n grid (marked ‘Start’ in the diagram below).
    The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked ‘Finish’ in the diagram below).
    How many possible unique paths are there?

      原谅我重新贴一遍题目描述,不是为了凑字数,而是为了让搜索引擎能索引到这篇文章,其实也是算一种简单的SEO。
      简单描述下题目,有个机器人要从左上角的格子走到右下角的格子,机器人只能向下或者向右走,总共有多少种可能的路径?
      第二题和第一题唯一的不同是第二题多了一些限制,有些格子不能走,但其实这并未增加题目的复杂度。俩道题有个共同的解题方式——动态规划。 关键思路是 到每个格子的路径数只和这个格子左边和上边格子的有关,是到左和上边格子的路径数之和。 用代码描述就是 obstacleGrid[i][j] = obstacleGrid[i-1][j] + obstacleGrid[i][j-1]; 恩,第二题的核心代码就这一行,剩下的就是对初始状态、特殊格子和边界的处理,完整代码如下,仅供参考。

    public class Solution {
        public int uniquePathsWithObstacles(int[][] obstacleGrid) {
            for (int i = 0; i < obstacleGrid.length; i++) {
                for (int j = 0; j < obstacleGrid[0].length; j++) {
                    if (1 == obstacleGrid[i][j]) {  //特殊格子处理
                        obstacleGrid[i][j] = 0;
                        continue;
                    }
                    if (0 == i + j) {  //左上角格子,初始状态处理
                        obstacleGrid[i][j] = 1; 
                        continue;
                    } else if (0 == i) {   //上边界处理
                        obstacleGrid[i][j] = obstacleGrid[i][j - 1];
                    } else if (0 == j) {   //左边界处理
                        obstacleGrid[i][j] = obstacleGrid[i - 1][j];
                    } else {
                        obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
                    }
                }
            }
            return obstacleGrid[obstacleGrid.length-1][obstacleGrid[0].length-1];
        }
    }
    

      第62题也可以用同样的方式解决,但是需要自己创建一个m*n的数组。此解法的时间复杂度O(m*n) 空间复杂度同是O(m*n)。但其实这道题可以用组合数学的方式解决,可以把空间复杂度降到O(1)。
      机器人从左上角走到右下角,总共需要走m+n-2步,向下走了m-1步,向右走n-1步。 这不就变成一个(m+n-2)中选(m-1)或(n-1)的组合数问题了吗? 如此代码就可以变的非常简短了。

    public class Solution {
        public int uniquePaths(int m, int n) {
            int N = n + m - 2;
            int k = m - 1; 
            double res = 1;
            for (int i = 1; i <= k; i++)
                res = res * (N - k + i) / i;
            return (int)res;
        }
    } 
    

      很遗憾的是因为63题中引入了特殊情况,无法再用数学的方式处理了,貌似只能用DP(反正我是没想到方法)。

    展开全文
  • Hash unique和Sort unique

    千次阅读 2014-02-21 13:44:23
    SQL> set linesize 200 SQL> set pagesize 200 SQL> set autot trace SQL> select distinct department_name from hr.departments dept, hr.employees emp where dept.department_id = emp.department_id;
  • Unique Paths 题目大意 机器人从起点到终点有多少条不同的路径,只能向右或者向下走。 解题思路 动态规划 由于只能有向下向右,只有从[1][1]开始的格子需要选择走法,第一行和第一列所有都只有一种走法,...
  • C++11中unique_ptr的使用

    万次阅读 2016-08-14 11:39:29
    在C++中,动态内存的管理是通过一对运算符来完成的:new,在动态内存中为对象分配空间并返回一个指向该对象的指针,可以选择对对象进行初始化;delete,接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。...
  • unique 函数

    千次阅读 2014-07-20 07:58:45
    unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。他是c++中的函数,所以头文件要加#include,具体用法如下: ...
  • unique用法

    万次阅读 2018-08-28 09:13:58
    https://www.cnblogs.com/hua-dong/p/7943983.html
  • No unique bean of type [com.home.web.AbsCrudDaoImpl] is defined: expected single matching bean but found 3: [agoodsCategoryDao, agoodsInfoDao, generateDao] 我是写了一个公共的dao类,然后继承这个类,...
  • np.unique( )的用法

    万次阅读 多人点赞 2018-03-23 21:10:19
    该函数是去除数组中的重复数字,并进行排序之后输出。
  • c++的unique函数

    千次阅读 2017-06-26 21:23:54
    unique是 c++标准模板库STL中十分实用的函数之一,使用此函数需要#include 该函数的作用是“去除”容器或者数组中相邻元素的重复出现的元素,注意 (1) 这里的去除并非真正意义的erase,而是将重复的元素放到容器的...
  • std::unique_ptr, decltype(unique_deleter)> pUniquePtr2(new int(5), unique_deleter); // shared_ptr == nullptr, 删除器仍然被调用, 幸好对"nullptr"有检查 std::shared_ptr<int> pSharedPtr(nullptr, ...
  • mysql的unique key

    千次阅读 2018-03-15 22:59:51
    最近需要用mysql做一个配置, 类似于配置文件, mysql表的列有key,value值, 此时, 可以考虑unique key, 来看看:mysql&gt; show create table yyy; +-------+-----------------------------------------------...
  • pandas 之unique()函数与nunique()函数区别

    万次阅读 多人点赞 2019-06-23 13:50:10
    很多功能函数自己试一试就全知道了,开始看别人的代码一直不太清楚两者的区别,总是模糊的以为它俩是一样的,是获取...nunique()Return number of unique elements in the object.即返回的是唯一值的个数 例如: ...
  • 一.unique函数 类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。 该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示...
  • oracle创建unique和删除unique

    千次阅读 2019-07-31 15:33:18
    创建unique和删除unique alter table ONEENTERPRISEONEFILE drop unique(name);--删除原来name列的索引 alter table ONEENTERPRISEONEFILE add constraint ENTERPRISESID_UNIQUE unique (name,address);--创建name...
  • SQL - UNIQUE约束

    千次阅读 2015-07-30 09:57:17
    UNIQUE约束可以阻止列中的两条记录完全相同。例如,在CUSTOMERS表中,你可以防止两个或更多人拥有相同的年龄。 示例 例如,以下SQL创建了一个名为CUSTOMERS的表,包含5个列。其中,AGE列设置为UNIQUE,因此不会...
  • LeetCode Unique Paths II

    千次阅读 2015-01-27 11:27:14
    Follow up for "Unique Paths":Now consider if some obstacles are added to the grids. How many unique paths would there be?An obstacle and empty space is marked as 1 and 0 respectively in the grid....
  • 使用单文档MFC,设置一个定时器SetTimer(1, 1000, NULL),使用它每隔一秒更新一次 地图。ontimer写入如下代码后: ... non-unique name specified.(name already in use by another object) 该怎么解决呢?
  • unique和nunique的区别

    2019-08-03 20:02:18
    简单明了: 以kaggle的 Intermediate ...unique() 统计list、series中的不同值的个数,返回的是list. nunique() 可直接统计dataframe中每列的不同值的个数,也可用于series,但不能用于list.返回的是不同值的个数. ...
  • uniqueunique_copy用法

    2017-07-21 20:37:51
    STL标准数据库里面两个函数,uniqueunique_copy,一个去重但是保留重复的元素其中一个放在段尾,后者用容器装住去重后的数组。#include #include #include #include #include using namespace std; int cmp(int...
  • unique函数

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

    千次阅读 2009-05-11 11:00:00
    独特的约束的SQL 唯一约束的唯一识别每个记录在一个数据库表。 的独特性和原发性主要制约因素都提供了保证唯一的一列或一组栏。 主键约束自动具有独特的约束定义它。 请注意,你可以有许多独特的限制,每表,但只有...
  • unique去重

    2018-07-06 11:30:56
    主要思路为,先排序,再唯一,然后删除最后面的那段重复代码。举例:有这样一个vector int a[10] = {1,3,6,4,7,2,3,4,8,9}; // 1,2,3,3,4,4,6,7,8,9 vector&lt;int&gt; ivec(a, a+10);...
  • C++ unique

    千次阅读 2011-06-27 15:04:00
    algorithm中的unique 用于去除指定容器中重复的元素,返回一个没有重复元素的序列的最后一个元素,要打印这样的数据信息则从容器的begin()开始到这个返回的地方就可以了。 vector strvec; cout vector::...

空空如也

1 2 3 4 5 ... 20
收藏数 66,203
精华内容 26,481
关键字:

unique