C++中使用哈希表(unordered_map)的一些常用操作方法

 更新时间:2022年03月11日 11:26:25   作者:hero_th  
C++标准库中使用的unordered_map底层实现是哈希表,下面这篇文章主要给大家介绍了关于C++中使用哈希表(unordered_map)的一些常用操作方法,需要的朋友可以参考下

1.建立基本数据类型的哈希表

unordered_map<int,int> m; //<string,string>,<char,char>

2.向哈希表中添加元素

1).insert 函数

m.insert(pair<int,int>(1, 10));
m.insert(pair<int,int>(2, 20));

2).用数组方法直接添加

m[3]=30;
m[4]=40;

3.成员函数

begin(),end()函数

m.begin() //指向哈希表的第一个容器
m.end()  //指向哈希表的最后一个容器,实则超出了哈希表的范围,为空

find()查找函数

m.find(2)  //查找key为2的键值对是否存在 ,若没找到则返回m.end()
if(m.find(2)!=m.end()) //判断找到了key为2的键值对

count() 查找函数

查找哈希表中key为3的键值对,返回其数量,为1,则找到,若没找到则返回0

m.count(3)  //返回 1
m.count(5)   //返回0

size()函数

m.size()   //返回哈希表的大小

empty()函数

m.empty()  //判断哈希表是否为空,返回值为true/false

clear()函数

m.clear()  //清空哈希表

swap()函数

交换两个哈希表中的元素,整个哈希表的键值对全部都交换过去

unordered_map<int,int> m1;
unordered_map<int,int> m2;
m1.swap(m2);
swap(m1,m2);

哈希表的遍历

第一种遍历

unordered_map<int, int> count;
for (auto p : count) {
    int front = p.first;   //key
    int end = p.second;   //value
}

第二种遍历

unordered_map<int, int> count;
for(auto it=m.begin();it!=m.end();it++)
{
    int front = it->first;   //key
    int end = it->second;   //value
}

补充:实际应用

LeetCode的242题:有效的字母异位词

题目描述:

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true
示例 2:

输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram

具体的分析可以去看LeetCode上面的优质解答,那上面的最高赞,或者关注的人比较多的答案基本都是很优秀的解答和分析。这个问题的解法其中一个就是使用了unordered_map进行解决的:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.length() != t.length()) {
            return false;
        }
        
        unordered_map<char, int> umap;
        for (int i = 0; i < s.size(); ++i) {
            umap[s[i]]++;
            umap[t[i]]--;
        }
 
        for (auto ch : umap) {
            if (ch.second != 0) {
                return false;
            }
        }
 
        return true;
    }
};

总结

到此这篇关于C++中使用哈希表(unordered_map)的常用操作的文章就介绍到这了,更多相关C++使用哈希表(unordered_map)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言进阶数据的存储机制完整版

    C语言进阶数据的存储机制完整版

    这篇文章主要为大家完整的介绍了C语言进阶数据的存储机制,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-02-02
  • 在动态库和静态库中使用模板(dynamic libraries ,static libraries)

    在动态库和静态库中使用模板(dynamic libraries ,static libraries)

    给大家介绍一下在动态库(dynamic libraries)和静态库(static libraries)使用模板(template)的用法和解决方案。
    2017-11-11
  • OpenCV实现霍夫变换直线检测

    OpenCV实现霍夫变换直线检测

    这篇文章主要为大家详细介绍了OpenCV实现霍夫变换直线检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++实现扫雷、排雷小游戏

    C++实现扫雷、排雷小游戏

    这篇文章主要为大家详细介绍了C++实现扫雷、排雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Matlab利用遗传算法GA求解非连续函数问题详解

    Matlab利用遗传算法GA求解非连续函数问题详解

    遗传算法起源于对生物系统所进行的计算机模拟研究。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。本文将利用其求解非连续函数问题,需要的可以参考一下
    2022-09-09
  • 基于QT5的文件读取程序的实现

    基于QT5的文件读取程序的实现

    本文主要介绍了基于QT5的文件读取程序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • opencv3/C++ FLANN特征匹配方式

    opencv3/C++ FLANN特征匹配方式

    今天小编就为大家分享一篇opencv3/C++ FLANN特征匹配方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • C++接口文件小技巧之PIMPL详解

    C++接口文件小技巧之PIMPL详解

    C++ 里面有一些惯用法(idioms),如 RAII,PIMPL,copy-swap、CRTP、SFINAE 等,今天要说的是 PIMPL,即 Pointer To Implementation,指向实现的指针,感兴趣的可以了解一下
    2023-06-06
  • C语言实现通讯录系统课程设计

    C语言实现通讯录系统课程设计

    这篇文章主要为大家详细介绍了C语言实现通讯录系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • C语言超详细讲解数据结构中双向带头循环链表

    C语言超详细讲解数据结构中双向带头循环链表

    带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单
    2022-04-04

最新评论