高手请进! 是不是Set为最优的选择?

log245 2009-11-06 09:25:09
现在有这样一个需求:
有一堆数值(INT) 总数不超过100个; 程序运行中会经常对这堆数进行插入,删除操作,比如 插入100, 删除1000, 插入 3000, 还有经常的遍历打印输出, 只有这三个操作
是不是Set<INT> 做实现最好呢?
还是有更好的方法呢?
就要三个接口就行了
还望高手不吝指教 谢谢!
...全文
128 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
老邓 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mlee79 的回复:]
如果不需要有序,hash会更好... 规模这么小,考虑性能干嘛...
[/Quote]
小数据量,hash的效率不如红黑树(std::set)
  • 打赏
  • 举报
回复
[Quote=引用楼主 log245 的回复:]
现在有这样一个需求:
有一堆数值(INT)总数不超过100个; 程序运行中会经常对这堆数进行插入,删除操作,比如 插入100, 删除1000, 插入 3000, 还有经常的遍历打印输出, 只有这三个操作
是不是Set <INT> 做实现最好呢?
还是有更好的方法呢?
就要三个接口就行了   
还望高手不吝指教 谢谢!
[/Quote]

红黑的插入,删除基本可以理解为O(logn)吧。遍历的话,如果对顺序没什么要求,那就无所谓了,因为除了hash,其他的都可以遍历,其实hash+索引也能遍历。
所以你用set吧。但是你这里对数值的排序什么的完全没有任何需求,其实就你这种情况,一个链表就搞定了。因为你也没说要随机访问。
不然的话,根据具体需求,红黑,堆都可以考虑。
do_fork 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mlee79 的回复:]
引用 12 楼 loaden 的回复:
引用 9 楼 mlee79 的回复:
如果不需要有序,hash会更好... 规模这么小,考虑性能干嘛...

小数据量,hash的效率不如红黑树(std::set)

偶不这样认为, rb的插入,删除效率并不好,搜索的效率倒勉强, 而他的要求是快速的插入删除,显然rb不合适..
如此小的规模,合适的选择hash方式做二次探测,冲突的几率会非常小...

[/Quote]

hash不太适合遍历, 1000个数据,哪个性能更好,很难说,最好实际测试
mLee79 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 loaden 的回复:]
引用 9 楼 mlee79 的回复:
如果不需要有序,hash会更好... 规模这么小,考虑性能干嘛...

小数据量,hash的效率不如红黑树(std::set)
[/Quote]
偶不这样认为, rb的插入,删除效率并不好,搜索的效率倒勉强, 而他的要求是快速的插入删除,显然rb不合适..
如此小的规模,合适的选择hash方式做二次探测,冲突的几率会非常小...
love514425 2009-11-07
  • 打赏
  • 举报
回复
> Tag;
lori227 2009-11-07
  • 打赏
  • 举报
回复
对无重复数据的集合, 用set, 有重复数据的就用multiset吧
heis07w 2009-11-06
  • 打赏
  • 举报
回复
set是红黑树,优点在有序,没有要求有序那hash不行么
yutaooo 2009-11-06
  • 打赏
  • 举报
回复

不需要有序,为什么不用list ?
mLee79 2009-11-06
  • 打赏
  • 举报
回复
如果不需要有序,hash会更好... 规模这么小,考虑性能干嘛...

clhposs 2009-11-06
  • 打赏
  • 举报
回复
list容器了? 高效插入删除
mengde007 2009-11-06
  • 打赏
  • 举报
回复
插入的效率已经比较高了;
xhd3767 2009-11-06
  • 打赏
  • 举报
回复
好久没摸C++了..基本忘光..拿分..
老邓 2009-11-06
  • 打赏
  • 举报
回复
如果不考虑随机访问的效率,set明显要优于vector的!
老邓 2009-11-06
  • 打赏
  • 举报
回复
是的,最佳选择!
log245 2009-11-06
  • 打赏
  • 举报
回复
我现在想回避的是插入和删除时的二叉树操作 因为插入和删除 会很频繁的

谢谢!
log245 2009-11-06
  • 打赏
  • 举报
回复
没有了 就是频繁的插入删除. 还有偶尔的遍历一下而已
谢谢!

mengde007 2009-11-06
  • 打赏
  • 举报
回复
还有什么目的

64,647

社区成员

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

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