STL算法库-排序和相关操作(二)

六、合并排序
6.1 两个已序集合的总和(merge)
原型:merge(iterator1 first1,iterator1 last1,iterator2 first2,iterator last2,OutputIterator dest)
定义:将两个已序集合进行合并,合并后进行重新排序,不排除重复元素,必须保证原序列有序
原型:merge(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2,OutputIterator dest,Compare comp)
定义:comp可以控制升序还是降序,实际上可以省略,源序列为升序的话comp设置降序也会无效

6.2 两个已序集合的并集(set_union)
原型:set_union(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2,OutputIterator dest)
定义:将两个已序集合进行并集,合并后重新排序,排除重复元素,当源区间本身有重复元素时,保留这些元素,必须保证原序列有序
原型:set_union(iterator1 first1,iterator1 last1,iterator2 first2,iterator 2 last2,OutputIterator dest,Compare comp);
定义:comp可以控制升序还是降序,实际上可以省略,原序列为升序的话comp设置降序也会无效

6.3 两个已序集合的交集(set_intersection)
原型:set_intersection(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2,OutputIterator dest)
定义:将两个已序集合进行交集,目标集合为两个集合共同含有的元素,当源区间本身具有重复元素时,保留这些重复元素,必须保证原序列有序
原型:set_intersection(iterator1 first1,iterator1 last1,iteraotr2 first2,iterator2 last2,OutputIterator dest,Compare comp)
定义:comp可以控制升序还是降序,实际上可以省略,原序列为升序的话comp设置降序也会无效

6.4 两个已序集合的差集(set_difference)
原型:set_difference(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2,OutputIterator dest)
定义:将区间[first1,last1]中有,[first2,last2]中没有的元素保存到以dest开头的区间中
原型:set_difference(iterator1 first1,iterator2 last1,iteraor2 first2,iterator2 last2,OutputIterator dest,Compare comp)
定义:comp可以控制升序还是降序,实际上可以省略,源序列为升序的话comp设置降序也会无效

6.5 连贯的已序区间合并算法(impalce_merge)
原型:inplace_merge(iterator first,iterator middle,iterator last)
定义:将已序区间[first,middle]和[middle,last]进行合并,使[first,last]为两个区间的和
原型:inplace merge(iterator first,iterator middle,iterator last,Compare comp)
定义:comp可以控制升序还是降序,实际上可以省略,源序列为升序的话comp设置降序也会无效

示例代码:

#include "stdafx.h"
#include "iostream"
#include "list"
#include "set"
#include "algorithm"
#include "functional"
#include "iterator"
using namespace std;

void print(int& elem)
{
 cout< l1;
 set s1;
 l1.assign(dim,dim+8);
 for(int i=0;i(cout," "));
 cout<(cout," "));
 cout<(cout," "),less());
 cout<(cout," "));
 cout<(cout," "));
 cout<::iterator pos;
 pos = find(l1.begin(),l1.end(),3);
 pos = find(++pos,l1.end(),3);
 pos++;
 inplace_merge(l1.begin(),pos,l1.end(),less());
 //l1.sort();
 for_each(l1.begin(),l1.end(),print);
 cout<

七、搜索
7.1 binary_search()算法(使用该算法之前,区间必须是已序的)
原型:bool binary_search(iterator first,iterator last,const T& Value)
定义:判断已序区间[first,last]中是否含有值为Value的元素
原型:bool binary_search(iterator first,iterator last,const T& Value,Comepar comp)
定义:判断已序区间[first,last]中是否含有值为Value的元素,Comp是一个可有可无的二元判断式,用来做排序准则

7.2 includes()算法
原型:bool includes(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2)
定义:检查[first1,last1]中是否存在区间[first2,last2]
原型:bool includes(iterator1 first1,iterator1 last1,iterator2 first2,iterator2 last2,Compare comp)
定义:检查[first1,last1]中是否存在区间[first2,last2],Comp是一个可有可无的二元判断式,用来做排序准则

7.3 搜索第一个或(和)最后一个可能位置
原型:lower_bound(iterator first,iterator last ,const T& value)
定义:返回第一个大于等于value的元素的位置
原型:upper_bound(iterator first,iterator last ,const T& value)
定义:返回第一个大于value的元素的位置
原型:euqal_range(iterator first,iterator last ,const T& value)
定义:返回等于value的元素的位置的pair

上述被搜索的区间必须是已序的,还有一种形式后面有用来表示顺序的判断式comp,可有可无

示例代码如下:

#include "stdafx.h"
#include "iostream"
#include "list"
#include "set"
#include "algorithm"
#include "functional"
#include "iterator"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 int dim[]={1,2,4,5,7,3,3};
 int dim1[]={4,5};
 multiset s1;
 list l1;
 for(int i=0;i<7;i++)
  s1.insert(dim[i]);
 l1.assign(dim,dim+2);
 copy(s1.begin(),s1.end(),ostream_iterator(cout," "));
 cout<::iterator it1=lower_bound(s1.begin(),s1.end(),3);
 cout<<"找?到?元a素?3的?下?边?界?位?置?是?"<::iterator,multiset::iterator> Setpair = equal_range(s1.begin(),s1.end(),3);
 return 0;
}



你可能感兴趣的:(STL)