C++ 两个vector如何能很高效的求交集和并集?

liyukuneed 2011-03-17 09:10:31
两个vector<int>
如vector<int> a = {2, 34, 75, 876, 565, …}
vector<int> b = {54, 34, 3, 8, 6767, 78, …}

两个vector的元素个数不同,元素个数也挺多的,100个以上吧。

由于我的程序数据量很大,所以要求交集和并集的效率要高一些,大家帮帮忙,看看有没有高效些的方法。最好能给下代码。先谢谢了~~
...全文
1426 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-17
  • 打赏
  • 举报
回复
仅供参考
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
char *Vowels = "aeiou" ;
char *AlphaNum = "0123456789abcdef" ;
char result[45] ;
char *last ;

int lenA = strlen(Alphabet) ;
int lenV = strlen(Vowels ) ;
int lenAN = strlen(AlphaNum) ;

cout << "Alphabet = " << Alphabet << endl ;
cout << "Vowels = " << Vowels << endl ;
cout << "AlphaNum = " << AlphaNum << endl ;

cout << "\nusing non-predicate versions" << endl ;

//non-predicate set_difference
last = set_difference(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_difference(Alphabet, AlphaNum) = " << result << endl ;

//non-predicate set_intersection
last = set_intersection(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_intersection(Alphabet, AlphaNum) = " << result << endl ;

//non-predicate set_symmetric_difference
last = set_symmetric_difference(Alphabet, Alphabet+lenA,
Vowels , Vowels +lenV,
result) ;
*last = 0 ;
cout << "set_symmetric_difference(Alphabet, Vowels) = " << result << endl ;

//non-predicate set_union
last = set_union(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result) ;
*last = 0 ;
cout << "set_union(Alphabet, AlphaNum) = " << result << endl ;

cout << "\nusing predicate versions" << endl ;

//predicate set_difference
last = set_difference(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_difference(Alphabet, AlphaNum) = " << result << endl ;

//predicate set_intersection
last = set_intersection(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_intersection(Alphabet, AlphaNum) = " << result << endl ;

//predicate set_symmetric_difference
last = set_symmetric_difference(Alphabet, Alphabet+lenA,
Vowels , Vowels +lenV,
result , less<char>()) ;
*last = 0 ;
cout << "set_symmetric_difference(Alphabet, Vowels) = " << result << endl ;

//predicate set_union
last = set_union(Alphabet, Alphabet+lenA,
AlphaNum, AlphaNum+lenAN,
result , less<char>()) ;
*last = 0 ;
cout << "set_union(Alphabet, AlphaNum) = " << result << endl ;

return 0 ;
}
無_1024 2011-03-17
  • 打赏
  • 举报
回复
嗯 不错有库函数
donghua_xiaofeixia 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 freezezdj 的回复:]
使用STL算法:
sort 排序
set_union 并集
set_intersection 交集
[/Quote]

使用这三个函数,LZ好好看看参数啊,不要搞错了,估计LZ对STL算法不是很熟悉啊
hastings 2011-03-17
  • 打赏
  • 举报
回复
注意点:使用前需排序~~
delphiwcdj 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 freezezdj 的回复:]

使用STL算法:
sort 排序
set_union 并集
set_intersection 交集
[/Quote]
不错
liyukuneed 2011-03-17
  • 打赏
  • 举报
回复
谢谢各位了~~
冻结 2011-03-17
  • 打赏
  • 举报
回复
使用STL算法:
sort 排序
set_union 并集
set_intersection 交集
pengzhixi 2011-03-17
  • 打赏
  • 举报
回复
试试两个库函数吧
set_union
set_intersection
看看效率是否满足你的要求
xjmlj2010 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
试试两个库函数吧
set_union
set_intersection
看看效率是否满足你的要求
[/Quote]

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧