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;
}
具体请查看原文:
原文地址:http://blog.csdn.net/morewindows/article/details/7029587
- 大小: 26.8 KB
分享到:
相关推荐
- `hashtable.h`:实现哈希表容器,如hash_set、hash_multiset、hash_map和hash_multimap,提供快速的平均查找和插入性能。 - `deque.h`:双端队列,允许在两端进行插入和删除操作。 - `list.h`:链表,支持快速...
在这个"stl_code.rar"压缩包中,我们找到了与STL相关的源代码,特别是关于`vector`和`hash`以及`set`的实现。下面将详细解释这些概念及其在C++编程中的应用。 1. **STL `vector`**: - `vector`是STL中的一种动态...
在这个名为"STL.rar_hash stl_stl 封装_搜索树"的压缩包中,我们主要探讨的是STL在哈希表、数据结构封装以及搜索树方面的应用。 1. **STL中的哈希表**: 哈希表是一种能够快速查找的数据结构,STL通过`<unordered_...
源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将...
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。...例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。
它还支持某些非标准扩展,如hash_map和hash_set,它们提供了与map和set类似的功能,但基于哈希表实现,查找效率更高。 深入研究STLport的源代码,我们可以学习到模板元编程、迭代器实现、容器内部结构、算法优化等...
STL源码剖析,这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制...
通过`std::hash`模板类的特化或者`std::unordered_set/map`的`hash_function`成员函数进行设置。 - **等价关系**:对于`std::unordered_map`,键的等价关系默认由`==`运算符决定。如果需要自定义,可以提供一个比较...
接下来是`linked_hash_set`,它与`linked_hash_map`类似,只是不存储键值对,而是仅存储单个元素。这种数据结构同样使用链式哈希表,但简化了元素的存储,适用于需要快速查找、插入和删除单个元素的场景。 `LRU`...
6. **特殊容器**:除了基本的容器外,STLport还包含一些特殊的容器,如`hash_map`和`hash_set`,它们使用哈希表实现快速查找。 STLport 5.1.3版本的源码分析会详细讲解这些组件的内部工作原理,帮助开发者理解...
23.22 集合求异set_symmetric_difference 399 23.23 最小值min 401 23.24 最大值max 402 23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23....
例如,VC++提供了hash_map和hash_set等非标准容器,它们提供了基于哈希表的快速查找功能。 6. 源码学习: 阅读STL的源码可以帮助开发者深入理解其内部实现,提升C++编程技巧。例如,了解vector的扩容机制,可以更...
c++ std stl各容器的应用场合及性能 map hash_map unordered_map multimap list forward_list vector set hash_set multiset unsorted_set queue deque priority_queue
源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;你将看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;你...
"详细解说STL hash_map系列 -- STLDetailHashMap.htm"对STL中的关联容器hash_map进行了详细阐述。hash_map提供了基于哈希表的键值对存储,允许快速查找,这在需要高效查找的应用中非常有用。 "STL使用入门( Using ...
1.2 stl 六大组件 - 功能与运用 004 1.3 gnu源码开放精神 007 1.4 hp stl实现版本 009 1.5 p.j. plauger stl实现版本 010 1.6 rouge wave stl实现版本 011 1.7 stlport 实现版本 012 1.8 sgi stl实现版本 总...
本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,通过大量的源码分析和应用实例,详细介绍了C++ STL的技术原理和使用方法。...
- `hash_set`, `hash_multiset`, `hash_map`, `hash_multimap`:使用哈希函数优化查找速度,适用于大量数据的快速查找。 - `bitset`, `valarray`, `stack`, `queue`, `priority_queue`:这些容器提供了特定的用途,...
23.22 集合求异set_symmetric_difference 399 23.23 最小值min 401 23.24 最大值max 402 23.25 最小元素min_element 403 23.26 最大元素max_element 404 23.27 字典比较lexicographical_compare 405 23....