c++ stl::set的操作
发布网友
发布时间:2022-05-06 14:15
我来回答
共4个回答
懂视网
时间:2022-05-06 18:37
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样,而且字段类型要相容(一致); 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union
Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All
两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致);
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
可以在最后一个结果集中指定Order by子句改变排序方式。
例如:
建两张表:s1,s2
create table s1
(
id number(10),
name varchar2(20),
age number(10)
)
create table s2
(
id number(10),
name varchar2(20),
age number(10)
)
插入数据:
insert into s1 values(1,'刘备',51);
insert into s1 values(1,'刘德华',54);
insert into s1 values(3,' 张学友',54);
insert into s1 values(4,'黎明',54);
insert into s2 values(1,'刘备',51);
insert into s2 values(3,' 张飞',52);
insert into s2 values(4,'关羽',53);
1、Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
select * from s1
union
select * from s2;
得到结果集:
ID NAME AGE
1 1 刘备 51
2 1 刘德华 54
3 3 张飞 52
4 3 张学友 54
5 4 关羽 53
6 4 黎明 54
2、Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
select * from s1
union all
select * from s2;
得到结果集:
ID NAME AGE
1 1 刘备 51
2 1 刘德华 54
3 3 张学友 54
4 4 黎明 54
5 1 刘备 51
6 3 张飞 52
7 4 关羽 53
3、Intersect:对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
select * from s1
Intersect
select * from s2;
得到结果集:
ID NAME AGE
1 1 刘备 51
4、Minus:对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。
select * from s1
Minus
select * from s2;
得到结果集:
ID NAME AGE
1 1 刘德华 54
2 3 张学友 54
3 4 黎明 54
热心网友
时间:2022-05-06 15:45
用algorithm里面的set_union和set_intersection。给你个例子:
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main(int argc, char** argv)
{
int a[] = {10,20,30,40,50};
int b[] = {20,50,60};
set<int> first (a,a+sizeof(a)/sizeof(a[0]));
set<int> second (b,b+sizeof(b)/sizeof(b[0]));
set<int> result;
set_intersection (first.begin(), first.end(), second.begin(), second.end(),
insert_iterator<set<int> >(result, result.begin() ) );
copy(result.begin(), result.end(), ostream_iterator<int>(cout, " "));
return 0;
}
输出(交集):
20 50
热心网友
时间:2022-05-06 17:03
#include <algorithm >追问忘了STL除了容器还包括算法……
函数的原型是什么样的?
热心网友
时间:2022-05-06 18:37
额度vfgedrfgretgtvr