美文网首页
无序关联容器【GeekBand】

无序关联容器【GeekBand】

作者: clamxyz | 来源:发表于2016-06-27 23:31 被阅读0次

本周老师讲解了关联容器map和set、STL的整体结构、仿函数、非变异的泛型算法等。但是这些内容均为C++98的内容,不包括C++11新增的无序管理容器、foward_list和array容器。本文主要讲述C++11新增的无序关联容器的用法。
C++11新增了4中无序关联容器,分别为unordered_set, unordered_map, unordered_multiset, unordered_multimap。这些容器与之前有序容器最大的差别在于,这些容器使用哈希函数+关键字==操作符来组织元素。因此,要使用无序关联容器来组织元素的话,必须保证容器元素已经实现==操作符。
由于无序关联容器在组织元素时用到哈希函数因此理论上性能会比有序关联容器要高,因此在维护有序位序代价较高的场合或者实际证明使用哈希函数可以显著提高性能的场合都可以优先考虑使用无序关联容器。
无序关联容器的接口和有序关联容器在插入元素、查找元素、删除元素和遍历元素都和有序容器一样。下面的代码列举了无序关联容器的使用方法。

void word_counter()
{
    ifstream fin("E:\\cppworkspace\\HelloWorld\\src\\ref_container.cpp");
    string buf;
    istream_iterator<char> iter(fin);
    istream_iterator<char> eof;
    unordered_map<string, size_t> words_map;
    set<char> exclude = {',', '.', '?', '<', '>', ':', '(', ')', '[', ']', '&', '-', '{', '}', ' ', '\t', '=', '\n', '\r', ';', '+', '!', '/', '*', '"', '#', '\\'};
    while(iter != eof){
        if (exclude.find(*iter) == exclude.end()){
            buf.push_back(tolower(*iter));
        }else{
            if (!buf.empty()){  /*buf has content, it's a word*/
                words_map[buf]++;
                buf.clear();
            }
        }
        iter++;
    }
    for(auto &p:words_map){
        cout << p.first << " Occure " << p.second << " time(s) " << endl;
    }
}

无序关联容器还提供了一组桶管理操作,函数接口如下:

*桶访问接口*
begin() - 返回一个迭代器,指向指定的桶的开始 
end() - 返回一个迭代器,指向指定的桶的末尾 
bucket_count() - 返回桶的数量
max_bucket_count() - 返回桶的最大数量
bucket_size() - 返回在特定的桶中的元素数量 
bucket(key) -  返回带有特定键的桶 
*哈希策略*
load_factor - 返回每个桶的平均元素数量
max_load_factor -  管理每个桶的平均元素数量的最大值
rehash -  为至少为指定数量的桶预留存储空间。这会重新生成哈希表。 

参考资料:
1.cpp primer 5th

相关文章

  • 无序关联容器【GeekBand】

    本周老师讲解了关联容器map和set、STL的整体结构、仿函数、非变异的泛型算法等。但是这些内容均为C++98的内...

  • C++11 标准库源代码分析:连载之八

    无序关联容器 无序关联容器(Unordered associative container)是C++11标准库中新...

  • 023 无序容器

    新标准定义了 4 个无序关联容器(unordered associative container)。这些容器不是使...

  • Boolan C++ STL与泛型编程_3

    主要内容: 本节深入剖析了各种常用容器和容器适配器的底层支撑,容器主要分为三大类,顺序容器、关联容器、无序容器。其...

  • 无序容器

    1. 无序容器 https://stackoverflow.com/questions/15869066/inse...

  • C++学习笔记 —— 关联容器map

    一、关联容器 关联容器(associative container)是对容器概念的另一个改进。关联容器将值与键关联...

  • 第11章:关联容器

    1. 使用关联容器 2. 关联容器概述2.1 定义关联容器2.2 关键字类型的要求2.3 pair类型 3. 关联...

  • 第11章 关联容器

    关联容器和顺序容器关联容器:按关键字保存和访问元素顺序容器:按在存储位置保存和访问元素 关联容器支持高效的关键字查...

  • GeekBand STL与泛型编程 -- 2

    1. 关联容器 关联容器与顺序容器有着根本的不同:关联容器中的元素是按照关键字来保存和访问的。与之相对,顺序容器中...

  • unordered_map关联容器

    特性 1.关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同)2.无序性:使用hash表存储,...

网友评论

      本文标题:无序关联容器【GeekBand】

      本文链接:https://www.haomeiwen.com/subject/mxftjttx.html