set_union的几个例子[转]

问题:将多个集合合并成没有交集的集合。
  给定一个字符串的集合,格式如:{aaabbbccc},{bbbddd},{eeefff},{ggg},{dddhhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaabbbcccdddhhh},{eeefff},{ggg}。
  (1)请描述你解决这个问题的思路;
  (2)请给出主要的处理流程,算法,以及算法的复杂度
  (3)请描述可能的改进。

考虑使用泛型算法set_union( ).

OutputIterator set_union (InputIterator source1Beg, InputIterator source1End, InputIteratorsource2Beg, InputIterator source2End, OutputIterator destBeg)

Return value: An iterator to the end of the constructed range.

例子:

http://www.cplusplus.com/reference/algorithm/set_union/

 1 // set_union example
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <vector>
 5 using namespace std;
 6
 7 int main () {
 8   int first[] = {5,10,15,20,25};
 9   int second[] = {50,40,30,20,10};
10   vector<int> v(10);                           // 0  0  0  0  0  0  0  0  0  0
11   vector<int>::iterator it;
12
13   sort (first,first+5);     //  5 10 15 20 25
14   sort (second,second+5);   // 10 20 30 40 50
15
16   it=set_union (first, first+5, second, second+5, v.begin());
17                                                // 5 10 15 20 25 30 40 50  0  0
18   cout << "union has " << int(it - v.begin()) << " elements.\n";
19   return 0;
20 }
 1 // set_union2 example
 2 #include <set>
 3 #include <iterator>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 int main(void)
 9 {
10     set<int> a,b,c;
11     a.insert(1);
12     a.insert(6);
13     a.insert(6);
14     b.insert(2);
15     b.insert(6);
16     b.insert(9);
17
18     //最后一个参数若使用c.begin()会产生编译错误assignment of read-only localtion.
19
20     set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.begin()));
21     copy(c.begin(), c.end(), ostream_iterator <int> (cout, " "));
22     return 0;
23 } 
 1 // set_union3 example
 2 #include <vector>
 3 #include <iterator>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7
 8 int main()
 9 {
10     vector<int> a,b,c;
11     for(int e=0;e<10;e++)
12     {
13        a.push_back(e);
14        b.push_back(e+5);
15     }
16     //最后一个参数若使用c.begin(),运行时会出错“Segmentation fault (core dumped)”.
17     set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(c));
18     copy(c.begin(), c.end(), ostream_iterator<int> (cout, " "));
19     return 0;
20 }
时间: 2024-11-22 22:03:22

set_union的几个例子[转]的相关文章

STL algorithm算法set_symmetric_difference,set_union(54)

set_symmetric_difference原型: std::set_symmetric_difference default (1) template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_symmetric_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 fi

Android小例子:使用反射机制来读取图片制作一个图片浏览器

效果图: 工程文件夹: 该例子可供于新手参考练习,如果有哪里不对的地方,望指正>-< <黑幕下的人> java代码(MainActivity.java): package com.example.imageswitchtest; import java.lang.reflect.Field; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.v

JSON 简单例子

代码: json [ { "title" : "a", "num" : 1 }, { "title" : "b", "num" : 1 }, { "title" : "c", "num" : 1 }] 例子1 js var box=[ { title:'a', num:1, height:177, }, { title:'b',

最简单的基于FFmpeg的AVDevice例子(读取摄像头)【转】

转自:http://blog.csdn.net/leixiaohua1020/article/details/39702113 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] libavdevice使用 注意事项 代码 结果 下载 =====================================================最简单的基于FFmpeg的AVDevice例子文章列表: 最简单的基于FFmpeg的AVDevice例子(读取摄像头) 最简单的基于FFm

Clustering by Passing Messages Between Data Points(Brendan J.Frey* and Delbert Dueck)例子

例1,数据点聚类:AP应用到25个二维数据中,使用负平法误差作为相似度  聚类数目不用预先指定 AP的一个优点是聚类数目不用预先指定,而是在消息传递方法中慢慢浮现,取决于输入参考度(preference),这种自动模型的选择,基于先验指定每一个数据点有多合适作为exemplar. 下图表示输入常量参考度对聚类数目的影响,这种关系近乎同样于在精确最小平方误差中的关系. 例2,人脸识别:使用优化标准为均方差,识别900张灰度图像   AP一致的能够实现更低的误差,在时间上花费要少于两个数量级. AP

Python之路42-socket介绍及简单例子

socket对数据的底层收.发做了封装 实现通信要通过IP+port 一个socket服务端和客户端实现的伪代码 # 发送端 # import socket # socket.TCP/IP # connect(a.ip,a.port) # socket.send("hello") # socket.recv() # socket.close() # 接收端 # import socket # socket.TCP/IP # listen(0.0.0.0,6969) # waiting(

c语言一个例子对比php学习随记

今天开始学写一些简单的C例子,发现很多和PHP不一样的地方,做个笔记. #include <stdio.h> int main(void) { int a,b; printf("请输入整数a"); //这里是用双引号,不能用单引号,PHP类似的地方可以用单引号,这里需注意 scanf("%d",&a); //获取用户输入值存入a printf("请输入整数b"); scanf("%d",&b);//

判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)

在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 总不能在manifest里加权限,然后用户运行时老弹确认吧? 当然啦,可以将需要管理员权限的部分写到另一个小程序,需要时调用它就行了 不过还是不爽,如果是一个小小的程序还要再加另一个小小小程序的话 那好,干脆判断是不是Win7...开启了UAC没有之类 开启的话再判断下是不是以管理员权限运行,不是

Web前端入门学习(6)——浮动例子之鉴赏

浮动例子之鉴赏 在浮动原理及清除浮动一文中(http://cherry360.blog.51cto.com/12176744/1864258),简单介绍了浮动的相关基础知识,为了巩固知识点,本篇结合代码展示关于浮动的几个常见例子. 例1:九格子 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>九格子</titl