数据结构:哈希表(unordered_map)

unordered_map 是 C++ 标准库中的一种哈希表实现,它提供了基于键值对(key-value)的存储,提供了常数时间复杂度的查找、插入和删除键值对的操作。

初始化代码示例:

cpp 复制代码
#include <unordered_map>
using namespace std;


unordered_map<int, string> hashmap;   // 初始化一个空的哈希表 map


unordered_map<int, string> hashmap{{1, "one"}, {2, "two"}, {3, "three"}};// 初始化一个包含一些键值对的哈希表 map

另外,在C++哈希表中,如果被访问的是一个不存在的键,它会自动创建这个键,对应的值时默认构造的值。

cpp 复制代码
#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
    // 初始化哈希表
    unordered_map<int, string> hashmap{{1, "one"}, {2, "two"}, {3, "three"}};


    cout << hashmap.empty() << endl;    // 检查哈希表是否为空,输出:0 (false)


    cout << hashmap.size() << endl;    // 获取哈希表的大小,输出:3

    // 查找指定键是否存在
    // 注意 contains 方法是 C++20 新增的
    // 输出:Key 2 -> two
    if (hashmap.contains(2)) {
        cout << "Key 2 -> " << hashmap[2] << endl;
    } else {
        cout << "Key 2 not found." << endl;
    }


    cout << hashmap[4] << endl;    // 获取指定键对应的值,若不存在会返回默认构造的值
    // 输出空字符串


    hashmap[4] = "four";    // 插入一个新的键值对


    cout << hashmap[4] << endl;    // 获取新插入的值,输出:four


    hashmap.erase(3);    // 删除键值对


    if (hashmap.contains(3)) {
        cout << "Key 3 -> " << hashmap[3] << endl;
    } else {
        cout << "Key 3 not found." << endl;
    }
    // 检查删除后键 3 是否存在
    // 输出:Key 3 not found.

    // 遍历哈希表
    // 输出(顺序可能不同):
    // 4 -> four
    // 2 -> two
    // 1 -> one
    for (const auto &pair: hashmap) {
        cout << pair.first << " -> " << pair.second << endl;
    }

    // 特别注意,访问不存在的键会自动创建这个键
    unordered_map<int, string> hashmap2;

    // 键值对的数量是 0
    cout << hashmap2.size() << endl; // 0

    // 访问不存在的键,会自动创建这个键,对应的值是默认构造的值
    cout << hashmap2[1] << endl; // empty string
    cout << hashmap2[2] << endl; // empty string

    // 现在键值对的数量是 2
    cout << hashmap2.size() << endl; // 2

    return 0;
}

哈希集合

unordered_set 是 C++ 标准库中的一种哈希集合实现,用于存储不重复的元素,常见使用场景是对元素进行去重。

初始化示例:

cpp 复制代码
#include <unordered_set>
using namespace std;


unordered_set<int> uset;    // 初始化一个空的哈希集合 set


unordered_set<int> uset{1, 2, 3, 4};  // 初始化一个包含一些元素的哈希集合 set

常用操作示例:

cpp 复制代码
#include <iostream>
#include <unordered_set>
using namespace std;

int main() {

    unordered_set<int> hashset{1, 2, 3, 4};    // 初始化哈希集合


    cout << hashset.empty() << endl;    // 检查哈希集合是否为空,输出:0 (false)


    cout << hashset.size() << endl;    // 获取哈希集合的大小,输出:4

    // 查找指定元素是否存在
    // 输出:Element 3 found.
    if (hashset.contains(3)) {
        cout << "Element 3 found." << endl;
    } else {
        cout << "Element 3 not found." << endl;
    }

    // 插入一个新的元素
    hashset.insert(5);

    // 删除一个元素
    hashset.erase(2);
    // 输出:Element 2 not found.
    if (hashset.contains(2)) {
        cout << "Element 2 found." << endl;
    } else {
        cout << "Element 2 not found." << endl;
    }

    // 遍历哈希集合
    // 输出(顺序可能不同):
    // 1
    // 3
    // 4
    // 5
    for (const auto &element : hashset) {
        cout << element << endl;
    }

    return 0;
}
相关推荐
历程里程碑2 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
你撅嘴真丑9 小时前
第九章-数字三角形
算法
uesowys9 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
ValhallaCoder9 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮9 小时前
AI 视觉连载1:像素
算法
智驱力人工智能10 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥10 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
月挽清风11 小时前
代码随想录第十五天
数据结构·算法·leetcode
XX風11 小时前
8.1 PFH&&FPFH
图像处理·算法
NEXT0611 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法