unique & lower_bound C++

原来C++也有unique和lower_bound,只需头文件iostream

  • unique

unique可以对数组进行相邻元素的“去重”,实现效果是把所有不重复的元素按顺序放在数组前面,剩余元素留在末尾。函数返回的是指针,表示最后一个唯一元素的位置的下一个地址值

假设a为大小为n的数组,且已经排好序,那么m=unique(a,a+n)-a,则m就是a中unique元素的个数,且a[:m]是已经去重后的数组,看一下例子就明白了:

int a[7] = {1,1,2,2,3,4,6};
cout<<unique(a,a+7)-a<<endl;
//5
for(int i=0;i<7;i++)
    cout<<a[i]<<" ";
//1 2 3 4 6 4 6
  • lower_bound

lower_bound(a,a+n,target)返回指向a[:n]中第一个≥target的元素的指针,用法如下:

int a[7] = {1,1,2,2,3,4,6};
cout<<lower_bound(a,a+7,5)<<endl;
//0xbffe70
cout<<lower_bound(a,a+7,5)-a<<endl;
//6
cout<<lower_bound(a,a+7,2)-a<<endl;
//2
时间: 2024-10-11 00:53:59

unique & lower_bound C++的相关文章

luoguP1955 程序自动分析

P1955 程序自动分析 2017-09-12 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足.例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x4≠x1,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足. 现

[模板总结] Java的一些模板

快速排序(数组a从小到大,参数1是待排序的数组,参数2是起始下标,参数3是终止下标): 1 static void sort(int [] a, int l,int r){ 2 int m = l+r>>1; 3 int i=l, j = r; 4 do{ 5 while( a[i]<a[m] ) i++; 6 while( a[j]>a[m] ) j--; 7 if( i<=j ){ 8 int t = a[i]; 9 a[i] = a[j]; 10 a[j] = t; 1

bzoj1935 [Shoi2007]园丁的烦恼

bzoj1935 [Shoi2007]园丁的烦恼 有N个点坐标为(xi,yi),M次询问,询问(a,b)-(c,d)的矩形内有多少点. 0≤n≤500000,1≤m≤500000,0≤xi,yi≤10000000 看完数据范围傻眼系列. 做法: 离线处理 因为这个范围肯定不能把x y都离散, 所以只把点和询问的y坐标放在一起都离散化,然后一起按x坐标排序, 再开一个树状数组,求出每个需要的点的二维前缀和. 不理解的话拿画图板画一下就好了. 细节见代码 #include<bits/stdc++.h

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

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

最近等对 (unique、lower_bound、离散化的配合)

我的第一篇用了unique.lower_bound.离散化的代码!??ヽ(°▽°)ノ? 一篇写的超好的离散化+unique函数+lower_bound函数等等函数的集合 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理

http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客 bzoj3289:Mato的文件管理 线段树求逆序对+莫队,但是数据量50000却没有给出范围,既然求逆序对,那么我们关注的只是数据之间的相对大小,此时我们可以把这50000个数据进行简化...嗯看大神的博客就明白了不需要多解释什么了..   下面是博客中未授权截取的大神的代码板子....不过都是自己看应该也没什么吧..... sort(sub_a,sub_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函数的函数原型如下: 只有两个参数,且参数类型都是迭代器: iterator unique(iterator it_1,iterator i

unique()函数

unique()是c++里面的一个去重函数,包含在<iostream>中. 该函数将重复的元素移至容器的末尾,返回的为前面的无重复项的尾地址. 由于返回的是地址,所以经常需要转换为数值使用. 比如: 1 int num[10]={1,1,2,2,2,3,4,5,5,5}; 2 int ans=unique(num,num+10)-num; 返回的ans值为5,,前5项为1 2 3 4 5.