set与hash_set
原文:http://blog.csdn.net/morewindows/article/details/7029587
STL系列之六 set与hash_set
set和hash_set是STL中比较重要的容器,有必要对其进行深入了解。在STL中,set是以红黑树(RB-tree)作为底层数据结构的,hash_set是以Hash table(哈希表)作为底层数据结构的。set可以在时间复杂度为O(logN)情况下插入、删除和查找数据。hash_set操作的时间复杂度则比较复杂,这取决于哈希函数和哈希表的负载情况。下面列出set和hash_set的常用函数:
set和hase_set的更多函数请查阅MSDN。
set的使用范例如下(hash_set类似):
- // by MoreWindows( http://blog.csdn.net/MoreWindows )
- #include <set>
- #include <ctime>
- #include <cstdio>
- using namespace std;
- int main()
- {
- printf("--set使用 by MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");
- const int MAXN = 15;
- int a[MAXN];
- int i;
- srand(time(NULL));
- for (i = 0; i < MAXN; ++i)
- a[i] = rand() % (MAXN * 2);
- set<int> iset;
- set<int>::iterator pos;
- //插入数据 insert()有三种重载
- iset.insert(a, a + MAXN);
- //当前集合中个数 最大容纳数据量
- printf("当前集合中个数: %d 最大容纳数据量: %d\n", iset.size(), iset.max_size());
- //依次输出
- printf("依次输出集合中所有元素-------\n");
- for (pos = iset.begin(); pos != iset.end(); ++pos)
- printf("%d ", *pos);
- putchar('\n');
- //查找
- int findNum = MAXN;
- printf("查找 %d是否存在-----------------------\n", findNum);
- pos = iset.find(findNum);
- if (pos != iset.end())
- printf("%d 存在\n", findNum);
- else
- printf("%d 不存在\n", findNum);
- //在最后位置插入数据,如果给定的位置不正确,会重新找个正确的位置并返回该位置
- pos = iset.insert(--iset.end(), MAXN * 2);
- printf("已经插入%d\n", *pos);
- //删除
- iset.erase(MAXN);
- printf("已经删除%d\n", MAXN);
- //依次输出
- printf("依次输出集合中所有元素-------\n");
- for (pos = iset.begin(); pos != iset.end(); ++pos)
- printf("%d ", *pos);
- putchar('\n');
- return 0;
- }
运行结果如下:
set与hash_set的更多相关文章
- 深入了解STL中set与hash_set,hash表基础
一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...
- STL之hash_set和hash_map
Contents 1 hash_set和hash_map的创建与遍历 2 hash_set和hash_map的查找 3 建议 一句话hash_set和hash_map:它们皆由Hashtable(St ...
- #include <hash_set>
哈希查找,不需要排序,适用于精确查找,比二分查找更快 #define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream&g ...
- 【STL】关联容器 — hash_set
容器hash_set是以hash table为底层机制的,差点儿所有的操作都是转调用hash table提供的接口.因为插入无法存储同样的键值,所以hash_set的插入操作所有都使用hash tab ...
- set 和hash_set和海量数据的处理问题
什么样的结构决定其什么样的性质,因为set/map/multiset/multimap都是基于RB-tree之上,所以有自动排序功能, 而hash_set/hash_map/hash_multiset ...
- Linux包括hash_map和hash_set的not declared问题
当在Linux下cpp文件包括hash_map或hash_set时.会出现"'hash_map' was not declared in this scope"问题. #inclu ...
- 14.hash_set(已过时,被unorded_set替代)
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS #include <iostream> #include <hash_set> ...
- hash_set和hash_map
1.hash_set集合容器 hash_set利用链式哈希表,进行数据的插入.删除和搜索.与set容器同样,不同意插入反复键值的元素.SGIC++哈希表是一个链式的结构,由表头和一系列单链组成.表头是 ...
- 17.查找效率最高的unorderd_set(替代hash_set)
#include <string> #include <iostream> //查询性能最高(不允许重复数据) #include <unordered_set> u ...
随机推荐
- [WebService]之TCPMon的使用
TCPMon是apache下的一个项目,下载地址:http://ws.apache.org/commons/tcpmon/download.cgi (1)功能: TCPMon可以拦截客户与服务之间的H ...
- linux常用的一些命令(不断增加中)
linux 下重启 apache: httpd -k restart 下面这些大多命令都可以在<鸟哥私房菜>的服务器中的“常用网络指令”和基础中的“程序与资源管理”中找到ps -aux 这 ...
- 面试题收集——Java基础部分(一)
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/3641769.html 感谢! 1.一个".java"源文件中是否可以包括多个类(不是内部类) ...
- html5 +css3 第一章学习和笔记
各位同学.身为本版的斑竹.,希望各位童鞋都能学到Html5 .特此没两天更新一个学习笔记和大家一起学习Html5.... 语法改变 1.新增的元素和废除的元素 2.新增的属性和 ...
- MPMoviePlayerController 视频播放器—IOS开发
MPMoviePlayerController 与AVAudioPlayer有点类似,前者播放视频,后者播放音频,不过也有很大不同,MPMoviePlayerController 可以直接通过远程UR ...
- uestc oj 1218 Pick The Sticks (01背包变形)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...
- zendstudio 出现failed to create the java machine转
是因为配置java虚拟机内存太小 打开zend for eclipse 10.5时报了个错: failed to create the java virtual machine google了一下,解 ...
- FullCalendar应用——读取JSON数据
开发者可以使用FullCalendar创建强大的日历日程应用,FullCalendar提供了丰富的选项设置和方法调用,使得开发者可以轻松的创建各种功能的日历程序.本文将结合实例使用PHP读取MySQl ...
- JS:公历、农历互转
先申明这段代码不是我写的,纯粹只是觉的比较好用,所以记录下来以后继续使用,也同样分享给大家,大家有更好的可以推荐给我,谢谢! function CalConv(M, dateStr) { if (da ...
- 使用.NET中的Action及Func泛型委托
委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调 ...