STL 集合部分操作

Posted thejacoblu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL 集合部分操作相关的知识,希望对你有一定的参考价值。

set_intersection

default (1)
template <class InputIterator1, class InputIterator2, class OutputIterator>
  OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
                                   InputIterator2 first2, InputIterator2 last2,
                                   OutputIterator result);
custom (2)
template <class InputIterator1, class InputIterator2,
          class OutputIterator, class Compare>
  OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1,
                                   InputIterator2 first2, InputIterator2 last2,
                                   OutputIterator result, Compare comp);

求两个(已排序)集合的交集。

构造一个排序的范围,从result的位置开始,然后是两个排序范围的集合的交集[first1,last1]和[first2,last2)。

两个集合的交集只由两个集合中的元素组成。由函数复制的元素总是以相同的顺序从第一个范围开始。

默认升序排列,也可以用comp自定义。两个元素,a和b被认为是相等的,如果(!(a<b) && !(b<a)或if (!comp(a,b) && !comp(b,a))。

范围内的元素已经按照相同的标准(操作符<或comp)排序。结果的范围也根据这个排序。

 

1.     前四个参数,可以是迭代器(vector,set)的首尾,也可以是数组的首尾,只要是有序的区间均可注意区间均为左闭右开。

2.  第五个参数,可以是vector(注意一定要预留大小!用it取得set_intersection的返回值后再resize),也可以是数组。

3.  compare函数自己编写

 1 // set_intersection example
 2 #include <iostream>     // std::cout
 3 #include <algorithm>    // std::set_intersection, std::sort
 4 #include <vector>       // std::vector
 5 
 6 int main () {
 7   int first[] = {5,10,15,20,25};
 8   int second[] = {50,40,30,20,10};
 9   std::vector<int> v(10);                      // 0  0  0  0  0  0  0  0  0  0
10   std::vector<int>::iterator it;
11 
12   std::sort (first,first+5);     //  5 10 15 20 25
13   std::sort (second,second+5);   // 10 20 30 40 50
14 
15   it=std::set_intersection (first, first+5, second, second+5, v.begin());
16                                                // 10 20 0  0  0  0  0  0  0  0
17   v.resize(it-v.begin());                      // 10 20
18 
19   std::cout << "The intersection has " << (v.size()) << " elements:\n";
20   for (it=v.begin(); it!=v.end(); ++it)
21     std::cout <<   << *it;
22   std::cout << \n;
23 
24   return 0;
25 }

set_union

求并集,方法和注意点与上面相同

set_difference

求差集,同上

merge

 1 // merge algorithm example
 2 #include <iostream>     // std::cout
 3 #include <algorithm>    // std::merge, std::sort
 4 #include <vector>       // std::vector
 5 
 6 int main () {
 7   int first[] = {5,10,15,20,25};
 8   int second[] = {50,40,30,20,10};
 9   std::vector<int> v(10);
10 
11   std::sort (first,first+5);
12   std::sort (second,second+5);
13   std::merge (first,first+5,second,second+5,v.begin());
14 
15   std::cout << "The resulting vector contains:";
16   for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it)
17     std::cout <<   << *it;
18   std::cout << \n;
19 
20   return 0;
21 }

合并两个有序区间

以上是关于STL 集合部分操作的主要内容,如果未能解决你的问题,请参考以下文章

C++ stl 集合或链表

C++--第23课 - STL简介

STL容器自定义内存分配器

STL容器自定义内存分配器

STL容器自定义内存分配器

STL源代码剖析——STL算法之set集合算法