`

STL系列之六 set与hash_set

    博客分类:
  • STL
 
阅读更多
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
分享到:
评论

相关推荐

    SGISTL.zip_sgi stl_sgistl_sgistl hash_m_sgistl windows

    - `hashtable.h`:实现哈希表容器,如hash_set、hash_multiset、hash_map和hash_multimap,提供快速的平均查找和插入性能。 - `deque.h`:双端队列,允许在两端进行插入和删除操作。 - `list.h`:链表,支持快速...

    stl_code.rar_STL vector_hash_stl set code_vector_vector stl

    在这个"stl_code.rar"压缩包中,我们找到了与STL相关的源代码,特别是关于`vector`和`hash`以及`set`的实现。下面将详细解释这些概念及其在C++编程中的应用。 1. **STL `vector`**: - `vector`是STL中的一种动态...

    STL.rar_hash stl_stl 封装_搜索树

    在这个名为"STL.rar_hash stl_stl 封装_搜索树"的压缩包中,我们主要探讨的是STL在哈希表、数据结构封装以及搜索树方面的应用。 1. **STL中的哈希表**: 哈希表是一种能够快速查找的数据结构,STL通过`&lt;unordered_...

    STL.源码剖析_____________

    源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、RB-tree的实现、hash-table的实现、set/map 的实现;你将看到各种算法(排序、搜寻、排列组合、数据移动与复制…)的实现;你甚至将...

    C++ STL 参考手册Cpp_STL_ReferenceManual.pdf

    STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。...例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为循环队列,set 的底层为红黑树,hash_set 的底层为哈希表。

    C++的STL源代码(STLport-5.2.1_src)

    它还支持某些非标准扩展,如hash_map和hash_set,它们提供了与map和set类似的功能,但基于哈希表实现,查找效率更高。 深入研究STLport的源代码,我们可以学习到模板元编程、迭代器实现、容器内部结构、算法优化等...

    STL源码剖析_Table_stlmemory_c++prim_vector_

    STL源码剖析,这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制...

    哈希表应用C++_STL_hash

    通过`std::hash`模板类的特化或者`std::unordered_set/map`的`hash_function`成员函数进行设置。 - **等价关系**:对于`std::unordered_map`,键的等价关系默认由`==`运算符决定。如果需要自定义,可以提供一个比较...

    linked_hash:L链式哈希[LRU]用于C ++的快速,仅标头,跨平台和类似STL的linked_hash_map和linked_hash_set。 (在leetcode上击败100%的提交)

    接下来是`linked_hash_set`,它与`linked_hash_map`类似,只是不存储键值对,而是仅存储单个元素。这种数据结构同样使用链式哈希表,但简化了元素的存储,适用于需要快速查找、插入和删除单个元素的场景。 `LRU`...

    STL.zip_analysis STLport_stl 源码分析_stlport

    6. **特殊容器**:除了基本的容器外,STLport还包含一些特殊的容器,如`hash_map`和`hash_set`,它们使用哈希表实现快速查找。 STLport 5.1.3版本的源码分析会详细讲解这些组件的内部工作原理,帮助开发者理解...

    C++ STL开发技术导引(第5章)

    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....

    STL.zip_STL_Visual_C++_

    例如,VC++提供了hash_map和hash_set等非标准容器,它们提供了基于哈希表的快速查找功能。 6. 源码学习: 阅读STL的源码可以帮助开发者深入理解其内部实现,提升C++编程技巧。例如,了解vector的扩容机制,可以更...

    细讲c++ 各种STL容器的应用场合及性能

    c++ std stl各容器的应用场合及性能 map hash_map unordered_map multimap list forward_list vector set hash_set multiset unsorted_set queue deque priority_queue

    STL.zip_Map 排序_STL_Table_stl map实现

    源码之前了无秘密,你将看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;你将看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;你...

    stl资料合集

    "详细解说STL hash_map系列 -- STLDetailHashMap.htm"对STL中的关联容器hash_map进行了详细阐述。hash_map提供了基于哈希表的键值对存储,允许快速查找,这在需要高效查找的应用中非常有用。 "STL使用入门( Using ...

    STL源码剖析.pdg

    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实现版本 总...

    C++ STL 开发技术导引(随书源码)

    本书共分5篇26章,以“C++编程技术→C++ STL泛化技术基础→C++ STL容器技术→C++ STL算法技术→C++ STL迭代器技术”为线索具体展开,通过大量的源码分析和应用实例,详细介绍了C++ STL的技术原理和使用方法。...

    精版Effective STL读书笔记

    - `hash_set`, `hash_multiset`, `hash_map`, `hash_multimap`:使用哈希函数优化查找速度,适用于大量数据的快速查找。 - `bitset`, `valarray`, `stack`, `queue`, `priority_queue`:这些容器提供了特定的用途,...

    C++ STL 开发技术导引(第6章)

    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....

Global site tag (gtag.js) - Google Analytics