C++的 stl中有没有红黑树,或者哈希列表的

xiaozhuhaoa 2010-11-10 01:30:25
有时候想用到红黑树,哈希列表。他们的插入和查询的时间都相当的好。

STL中有没有红黑树,和哈希列表的?

哈希列表还好,可以用一次线性探测的。还算蛮好用。
红黑树,自己写有点太繁琐了。有没有现成的用用。可以的话,把建树,和插入,还有查询的函数写给我。

最后可以写一段小的程序给我,演示下,建树,插入还有查询。

如果有哈希表的话,也同上。

thank you。

...全文
622 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
iealien 2010-11-10
  • 打赏
  • 举报
回复
SGI STL里面有 RB-TREE,HASHTABLE的 底层就是RB-TREE
cphj 2010-11-10
  • 打赏
  • 举报
回复
这是历史原因,之前提交给C++标准委员会的STL稿是有红黑树和哈希列表的,但标准委员会认为内容过多,砍掉了

结果各编译器都会自己提供一些私有实现,但用这些私有实现无法保证移植
wokonglinglude 2010-11-10
  • 打赏
  • 举报
回复
源自《STL源码剖析》--侯捷
关联容器--当元素被插入到容器中时,容器内部结构RB-tree 或者hash-table便依照其键值大小以某种特定规则将这个元素放置于适当位置。关联容器没有所谓的头尾只有大小。是一个blanced binary tree平衡二叉树。
例:set只有键值,并且根据键值自动排序。不允许有相同的键值。
#include <set>

int ia[5] ={0,1,2,3,4};
set<int> iset =(ia,ia+5);
iset.size();//5
iset.count(3);//1
iset.insert(3);//szie()=5;
iset.earse(1);删除1

//迭代器
set<int>::iterator iter =iset.begin();
for(iter;iter!=iset.end();++iter)
cout <<*iter;//0,2,3,4

iter =iset.find(3);//*iter=3

大致就是这样 详细还是你自己去看吧


luciferisnotsatan 2010-11-10
  • 打赏
  • 举报
回复
map,set内部就是红黑树

hash不是STL标准里的,但一些编译器有实现
AAA20090987 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lthyxy 的回复:]
set,map 实现都是自顶向下的红黑树啊。
hasp_map 实现就是以hashtable啊。这个不在STL标准内。
[/Quote]

同意,
好在VC和GCC都包含了hashmap, hashset
liutengfeigo 2010-11-10
  • 打赏
  • 举报
回复
set,map 实现都是自顶向下的红黑树啊。
hasp_map 实现就是以hashtable啊。这个不在STL标准内。
失落的凡凡 2010-11-10
  • 打赏
  • 举报
回复
少打一个}
失落的凡凡 2010-11-10
  • 打赏
  • 举报
回复

#include <set>
int main()
{
std::set<int> Set;
typedef std::set<int>::iterator Iter;
Set.insert(4);
Set.insert(8);
Set.insert(3);
if(( Iter iter=Set.find(5) ) == Set.end() )
{
// not found
}
else
{
assert(*iter == 5);
}
return 0;
xiaozhuhaoa 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 csuxiaowu 的回复:]
map就是基于红黑树的吧
[/Quote]

具体怎么用的,写个出来看看啊~~
Csuxiaowu 2010-11-10
  • 打赏
  • 举报
回复
map就是基于红黑树的吧
aBigWood 2010-11-10
  • 打赏
  • 举报
回复
有map和set。一般也有hash_map和hash_set,不过后两个似乎属于扩展。

64,646

社区成员

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

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