STL之unordered_map使用方法

STL之unordered_map使用方法

1.什么是STL呢

C++的STL(Standard Template Library)是C++标准库的一部分,它提供了一组通用的模板类和函数,实现了很多常见的数据结构和算法,使得C++程序员能够更方便地进行开发。STL的设计目标是提供高性能、通用性和可移植性。

STL主要包括以下几个组件:

  • 容器(Containers): 提供了各种数据结构,如向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)、映射(map)等。这些容器提供了不同的接口和特性,以满足不同的需求。

  • 迭代器(Iterators): 提供了一种统一的访问容器元素的方式,使得算法可以独立于容器而工作。迭代器允许你按顺序访问容器中的元素。

  • 算法(Algorithms): 提供了一系列通用的算法,如排序、查找、变换等。这些算法可以用于不同类型的容器,并且可以通过迭代器进行访问。

  • 函数对象(Function Objects): 也称为仿函数(Functors),是一种可以像函数一样调用的对象。它们通常用于算法中,允许自定义操作。

  • 适配器(Adapters): 提供了一些用于修改或扩展容器和迭代器接口的类,如栈适配器(stack)、队列适配器(queue)等。

2.unordered_map

【功能】:无序映射,与 map 类似,但不进行排序,提供更快的查找操作。是无序的哈希表,存储无序的键值对。

2.1 头文件:

#include <unordered_map>

2.2 怎么创建:

unordered<String,int> myMap;

2.3 初始化:

    // 插入键-值对
    myMap["Alice"] = 25;//类似数组方式的赋值,给键映射对应值
    myMap["Bob"] = 30;
    myMap["Charlie"] = 35;

2.4 根据key获取对应value值:

    cout << "Age of Alice: " << myMap["Alice"] << endl;

2.5 遍历,判断key是否存在:

    // 检查键是否存在
    if (myMap.find("David") != myMap.end()) {
        cout << "Age of David: " << myMap["David"] << endl;
    }

注:myMap.find()返回的是一个迭代器,可以根据迭代器it遍历无序哈希表,一般根据it是否等于xx.end()判断有没有找到对应的键,如果等于xx.end()就是没有找到,否则就是找到了。

2.6 怎么根据迭代器it获取key和value:

it->first 表示哈希表的键,而 it->second 表示哈希表键对应的值。这种表示方式允许您通过迭代器 it 来访问键值对的键和值。

    for (const auto& pair : myMap) {
        cout << pair.first << ": " << pair.second << endl;
    }

注:auto关键字是c++11后表示自动推导类型

情况1:用const auto& pair是不能修改pair的

image

修改键映射的值:

情况2:用auto& pair是可以修改迭代器指向的对象的

    for (auto& pair : myMap) {
        cout << pair.first << ": " << pair.second << endl;
        pair.second++;
    }

image

情况3:使用auto pair 是值传递

image

综合示例

#include <iostream>
#include <array>
#include <vector>
#include <unordered_map>

using namespace std;


int main() {
    // 创建一个 unordered_map,将字符串映射到整数
    unordered_map<string, int> myMap;

    // 插入键-值对
    myMap["Alice"] = 25;//类似数组方式的赋值,给键映射对应值
    myMap["Bob"] = 30;
    myMap["Charlie"] = 35;

    // 查找值
    cout << "Age of Alice: " << myMap["Alice"] << endl;

    // 检查键是否存在
    if (myMap.find("David") != myMap.end()) {
        cout << "Age of David: " << myMap["David"] << endl;
    }
    else {
        cout << "David not found in the map." << endl;
    }

    // 遍历 unordered_map
    for (const auto& pair : myMap) {
        cout << pair.first << ": " << pair.second << endl;
    }   

    return 0;
}

那么unordered_map的用法就讲到这里,下一章看map的用法。

  • 20
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西里小诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值