社区
C++ 语言
帖子详情
如何能够快速合并两个stl的set呢?
firstilo
2006-10-17 02:52:43
set好像没有类似merge的函数
要想合并两个set的内容,怎样做效率会比较高呢?
...全文
3108
17
打赏
收藏
如何能够快速合并两个stl的set呢?
set好像没有类似merge的函数 要想合并两个set的内容,怎样做效率会比较高呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2006-10-18
打赏
举报
回复
你看一下stl源码剖析就知道区别了
merge保留重复。
firstilo
2006-10-17
打赏
举报
回复
其实具体的性能参数我现在也说不上来,
我现在就是觉得有点抓瞎的感觉。。。
set_union和merge有什么区别呢?
taodm
2006-10-17
打赏
举报
回复
实时系统,数据量很大,这个是废话,你还是没有说出具体性能指标差了多少,这么优化是抓瞎。
用排序vector代替set,用set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.end()));是个还算可行的方案。
sinall
2006-10-17
打赏
举报
回复
#include <set>
#include <iterator>
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
set<int> a;
a.insert(1);
a.insert(6);
a.insert(5);
set<int> b;
a.insert(2);
a.insert(7);
a.insert(9);
set<int> c;
set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.end()));
copy(c.begin(), c.end(), ostream_iterator<int>(cout, " "));
return 0;
}
另外,最好用排序vector替代set。
见《Effective STL》“条款23:考虑用有序vector代替关联容器”
firstilo
2006-10-17
打赏
举报
回复
实时系统,数据量很大
就是会有很多小的数据集合,每个小的数据集合里面有可能会有很多元素
taodm
2006-10-17
打赏
举报
回复
哈哈,如果s1.insert( s2.begin(), s2.end() );还不能满足你的效率,你就得说你到底要求啥程度的效率了。
firstilo
2006-10-17
打赏
举报
回复
s1.insert( vect1.begin(), vect.end() );
和
s1.insert( s2.begin(), s2.end() );
比起来还是会快一些吧?
我现在的问题是
for(s2_iter = s2.begin(); s2_iter != s2.end(); ++s2_iter)
{
si.insert( *s2_iter );
}
的效率不能让人满意,需要找到更好的办法
即便修改数据结构也在所不惜
请各位指教!
哇哇大哭的谢!
taodm
2006-10-17
打赏
举报
回复
s1.insert( s2.begin(), s2.end() );
和
for(s2_iter = s2.begin(); s2_iter != s2.end(); ++s2_iter)
{
si.insert( *s2_iter );
}
呃,s1.insert( s2.begin(), s2.end() );只会高,不会低。但,也高得很有限。
一般不必考虑。
firstilo
2006-10-17
打赏
举报
回复
s1.insert( s2.begin(), s2.end() );
和
for(s2_iter = s2.begin(); s2_iter != s2.end(); ++s2_iter)
{
si.insert( *s2_iter );
}
比起来,效率会高一些么?
Wolf0403
2006-10-17
打赏
举报
回复
去看 Effective STL 吧。
firstilo
2006-10-17
打赏
举报
回复
哦,hash_set和set有什么关系么?
哪个插入效率更高?
lw1a2
2006-10-17
打赏
举报
回复
set本来就是排好序的
firstilo
2006-10-17
打赏
举报
回复
这个是要求s1和s2都是有序的吧?
如果无序怎么办呢?
taodm
2006-10-17
打赏
举报
回复
s1.insert(s2.begin(), s2.end());
lw1a2
2006-10-17
打赏
举报
回复
泛型的,一般比你自己写的要高,去查查吧
sinall
2006-10-17
打赏
举报
回复
-_-!!!
set_union
具体
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3, s3.begin()));
sinall
2006-10-17
打赏
举报
回复
set_union
具体
set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), inserter(s3));
C++
STL
程序员面试题
- 如何在不复制元素的情况下
合并
两个
vector? - 何时使用list,何时使用vector,以及它们各自的优缺点? - 举例说明如何自定义一个函数对象,并在
STL
算法中使用。 - 描述
STL
容器的内存管理和效率特点,比如...
18个
STL
程序带你逐步了解
STL
通过这18个
STL
程序的学习,你将能熟练掌握
STL
的核心概念,提高代码的可读性和复用性,提升编程效率。同时,实践过程中遇到的问题也会帮助你更好地理解和运用C++的模板机制,从而在解决复杂问题时游刃有余。
标准C C++
STL
参考手册中英文
两个
文档
- **deque**:双端队列,支持两端的
快速
插入和删除,以及随机访问。 - **
set
**:红黑树实现的关联容器,存储唯一的元素,按排序顺序访问。 - **multi
set
**:与
set
类似,但允许存储重复元素。 - **map**:红黑树...
C++&
STL
快速
入门(7个简明教程)
5. `std::merge`:
合并
两个
有序容器。 6. `std::transform`:将一个容器中的元素转换为另一个容器。 五、
STL
算法与迭代器结合 通过迭代器,可以将
STL
算法应用到任意容器上,实现通用的代码。例如,使用`std::sort`...
标准模板库
STL
参考手册
4. **
合并
和分割算法**:`merge()`
合并
两个
已排序的序列,`split()`将序列拆分成多个部分。 5. **移除算法**:`remove()`、`unique()`移除或消除重复元素。 **
STL
函数对象** 函数对象(也称为仿函数)是封装了特定...
C++ 语言
65,198
社区成员
250,522
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章