【C++】: unordered_map的使用

这篇具有很好参考价值的文章主要介绍了【C++】: unordered_map的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、概念

【C++】: unordered_map的使用,【C++】,c++,开发语言

  • key

               键值的类型。unordered_map中的每个元素都是由其键值唯一标识的。

  • T

                映射值的类型。unordered_map中的每个元素都用来存储一些数据作为其映射值。

  • Hash

                一种一元函数对象类型,它接受一个key类型的对象作为参数,并根据该对象返回size_t类型的唯一值。这可以是一个实现函数调用操作符的类,也可以是一个指向函数的指针(参见构造函数)。默认为hash<Key>。

  • Pred

                接受两个键类型参数并返回bool类型的二进制谓词。表达式pred (a, b), pred是这种类型的一个对象,a和b是键值,返回true,如果是应考虑相当于b。这可以是一个类实现一个函数调用操作符或指向函数的指针(见构造函数为例)。这默认为equal_to<Key>,它返回与应用相等操作符(a==b)相同的结果。

  • Allloc

                用于定义存储分配模型的allocator对象的类型。默认情况下,使用allocator类模板,它定义了最简单的内存分配模型,并且与值无关。

  • unordered_map是存储<key, value>键值对的关联式容器,其允许通过keys快速的索引到与 其对应的value。
  • 在unordered_map中,键值通常用于唯一的标识元素(键值是唯一的),而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。
  • 在内部,unordered_map没有对<kye, value>按照任何特定的顺序排序, 为了能在常数范围内 找到key所对应的value,unordered_map将相同哈希值的键值对放在相同的桶中。
  • unordered_map容器通过key访问单个元素要比map快,但它通常在遍历元素子集的范围迭 代方面效率较低。
  • unordered_maps实现了直接访问操作符(operator[]),它允许使用key作为参数直接访问 value。

2、构造函数

(1)创建空的unordered_map

    unordered_map<int, int> m;

(2)使用初始化列表初始化

    unordered_map<int, int> m1({ { 1,1 } });
    unordered_map<int, int> m2({
         { 1,1 }
        ,{ 2,2 }
        ,{ 3,3 }});

(3)拷贝构造函数初始化

    unordered_map<int, int> m3(m2);

(4)迭代器初始化 

    unordered_map<int, int> m4(m2.begin(),m2.end());

3、内置函数

3.1、容量

(1)判空(返回bool值)

【C++】: unordered_map的使用,【C++】,c++,开发语言

    unordered_map<int, int> m;
    cout << m.empty();

(2)求大小

【C++】: unordered_map的使用,【C++】,c++,开发语言

    unordered_map<int, int> m;
    m.size();

 (3)返回无序映射容器可以容纳的最大元素数。

【C++】: unordered_map的使用,【C++】,c++,开发语言

    unordered_map<int, int> m;
    cout << m.max_size();

3.2、迭代器

    unordered_map<int, int> v;
    v.begin();          //获取第一个数的位置
    v.end();            //获取最后一个数的位置

    unordered_map<int, string> m;
    m.emplace(make_pair(1, "yi"));
    m.emplace(make_pair(2, "er"));

    unordered_map<int, string>::iterator it = m.begin();
    while (it != m.end())
    {
        cout << (*it).first << " " << (*it).second << endl;
        it++;
    }

3.3、元素访问

【C++】: unordered_map的使用,【C++】,c++,开发语言

    unordered_map<string, string> mymap;

    mymap["Bakery"] = "Barbara";  
    mymap["Seafood"] = "Lisa";    
    mymap["Produce"] = "John";    

    string name = mymap["Bakery"];   
    mymap["Seafood"] = name;

    mymap["Bakery"] = mymap["Produce"];

    name = mymap["Deli"];      
    mymap["Produce"] = mymap["Gifts"];    

  3.4、修改器

(1)emplace(插入)

【C++】: unordered_map的使用,【C++】,c++,开发语言

    unordered_map<int, string> m;
    m.emplace(make_pair(1, "yi"));
    m.emplace(make_pair(2, "er"));

 (2)insert(插入)

使用和emplace类似,但是更加灵活

【C++】: unordered_map的使用,【C++】,c++,开发语言

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;


int main()
{
    unordered_map<string, double>
        myrecipe,
        mypantry = { {"milk",2.0},{"flour",1.5} };

    pair<string, double> myshopping("baking powder", 0.3);

    myrecipe.insert(myshopping);                        // copy insertion
    myrecipe.insert(make_pair<string, double>("eggs", 6.0)); // move insertion
    myrecipe.insert(mypantry.begin(), mypantry.end());  // range insertion
    myrecipe.insert({ {"sugar",0.8},{"salt",0.1} });    // initializer list insertion

    return 0;
}

(3)erase(删除)

【C++】: unordered_map的使用,【C++】,c++,开发语言

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;


int main()
{
    unordered_map<string, string> mymap;

    // populating container:
    mymap["U.S."] = "Washington";
    mymap["U.K."] = "London";
    mymap["France"] = "Paris";
    mymap["Russia"] = "Moscow";
    mymap["China"] = "Beijing";
    mymap["Germany"] = "Berlin";
    mymap["Japan"] = "Tokyo";
   
    // erase examples:
    mymap.erase(mymap.begin());      // erasing by iterator
    mymap.erase("France");             // erasing by key
    mymap.erase(mymap.find("China"), mymap.end()); // erasing by range


    return 0;
}

(4)clear(清空)

【C++】: unordered_map的使用,【C++】,c++,开发语言

(5)swap (交换)

【C++】: unordered_map的使用,【C++】,c++,开发语言

3.5、查找 

(1)find(返回迭代器)

【C++】: unordered_map的使用,【C++】,c++,开发语言

 unordered_map<int, string> m;
 m.emplace(make_pair(1, "yi"));
 m.emplace(make_pair(2, "er"));
    
 unordered_map<int, string>::iterator it = m.find(2);
 while (it != m.end())
 {
     cout << (*it).first << " " << (*it).second << endl;
     it++;
 }

(2)count(计数)

【C++】: unordered_map的使用,【C++】,c++,开发语言 一般在unordered_map中用不到,因为unordered_map中key的值是唯一的

一般在unordered_multimap中用的较多文章来源地址https://www.toymoban.com/news/detail-759196.html

4、unordered_map的遍历(迭代)

4.1、迭代器 

unordered_map<int, string>::iterator it = m.begin();
 while (it != m.end())
 {
     cout << (*it).first << " " << (*it).second << endl;
     it++;
 }

4.2、范围for 

    for (auto e : m)
	{
		cout << e.first << " " << e.second << endl;
	}

总结

  1. unordered_map中的的元素是键值对
  2. unordered_map中的key是唯一的,并且不能修改
  3. unordered_map遍历是一个无需的数列
  4. unordered_map的底层为哈希结构
  5. 支持[ ]操作符,operator[ ]中实际进行插入查找

到了这里,关于【C++】: unordered_map的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++进阶--使用哈希表实现unordered_map和unordered_set的原理与实例

    本文将介绍如何使用哈希表来实现C++ STL库中的unordered_map和unordered_set容器。我们将会解释哈希表的基本原理,并给出具体的代码示例,帮助读者更好地理解和应用哈希表。 哈希原理讲解–链接入口 set和map的实现的文章,与unordered_map实现类似 unordered_set是一种集合存储的容器

    2024年04月09日
    浏览(37)
  • 【C++进阶】使用一个哈希桶封装出unordered_map和uordered_set

    由于要使用一个哈希桶封装出unordered_map和uordered_set,所以要对哈希桶的模版参数进行改造,由于unordered_map是kv模型,而uordered_set是k模型,所以必须在实现哈希桶的时候提供模版,在封装uordered_set和unordered_map时传入不同的模版参数。 还要要修改的是,如果同时封装出,在获得

    2024年02月12日
    浏览(25)
  • C++ unordered_map哈希表

    leetcode: 49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。 示例 1: 输入: strs = [“eat”, “tea”, “tan”, “ate”, “

    2023年04月25日
    浏览(34)
  • C++:关联式容器:unordered_map

    目录 1.unordered_ map特性 2. 常用接口的使用 1.insert          2.find 3.erase ​4.operator[ ]  3.迭代器的有效性 1. unordered_map是存储key, value键值对的关联式容器,其允许通过keys快速的索引到与 其对应的value。 2. 在unordered_map中,键值通常用于惟一地标识元素,而映射值是一个对象,

    2024年02月09日
    浏览(28)
  • 【C++关联式容器】unordered_map

    目录 unordered_map 1. pair类型 2. 关联式容器额外的类型别名 3. 哈希桶 4. 无序容器对类型的要求 5. Member functions 5.1 constructor、destructor、operator= 5.1.1 constructor 5.1.2 destructor 5.1.3 operator=  5.2 Capacity ​5.2.1 empty 5.2.2 size 5.2.3 max_size 5.3 Iterators 5.4 Element access 5.4.1 operator[] 5.4.2 at 5

    2024年02月22日
    浏览(33)
  • 【C++】unordered_map,unordered_set模拟实现

    喜欢的点赞,收藏,关注一下把! 上一篇文章我们把unordered_map和unordered_set底层哈希桶的知识也都说清楚了,今天就根据哈希桶模拟实现出unordered_map和unordered_set。 这里如果看过以前文章【C++】map和set的模拟实现,应该会觉得简单。 因为unordered_map和unordered_set底层都是哈希桶

    2024年01月21日
    浏览(34)
  • 【C++】unordered_set与unordered_map的封装

    🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘 。 🛸 C++专栏 : C++内功修炼基地 家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真

    2024年02月08日
    浏览(36)
  • unordered_map的4种遍历方式(C++)

    c++ unordered_map4种遍历方式 此处我通过移到LeetCode上的一道题来演示unordered_map的用法:题目链接 首先看一下题目题解: 这里定义了一个unordered_map: 方式一:值传递遍历 可以使用aotu取代pairchar, int: 方式二:引用传递遍历 此处需要 添加const 可以使用aotu取代pairchar, int: 方式三:

    2024年02月10日
    浏览(26)
  • 【C++】哈希表封装实现 unordered_map 和 unordered_set

    在 C++98 中,STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 O(logN),即最差情况下只需要比较红黑树的高度次;但是当树中的节点非常多时,其查询效率也不够极致。 最好的查询是,不进行比较或只进行常数次比较就能够将元素找到,因此在 C++11 中,

    2023年04月16日
    浏览(37)
  • 【C++】用哈希桶模拟实现unordered_set和unordered_map

    顺序结构中(数组)查找一个元素需要遍历整个数组,时间复杂度为O(N);树形结构中(二叉搜索树)查找一个元素,时间复杂度最多为树的高度次logN。理想的搜索方法: 可以不经过任何比较,一次直接从表中得到要搜索的元素。 构造一种存储结构, 通过某种函数使元素的

    2024年04月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包