数据结构:哈希表(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;
}
相关推荐
雨出1 小时前
算法学习第十七天:LRU缓存与布隆过滤器
学习·算法·缓存
oioihoii1 小时前
深入解析 C++20 中的 std::bind_front:高效函数绑定与参数前置
java·算法·c++20
MobiCetus2 小时前
如何一键安装所有Python项目的依赖!
开发语言·jvm·c++·人工智能·python·算法·机器学习
思麟呀2 小时前
String类的模拟实现
开发语言·c++·算法
Dante7982 小时前
判断质数及其优化方法
开发语言·c++·算法
ylfhpy3 小时前
Java面试黄金宝典19
java·开发语言·数据结构·算法·面试·面经
不知名。。。。。。。。3 小时前
C++———— Vector
c++·算法·vector
姜威鱼3 小时前
蓝桥杯python编程每日刷题 day 20
数据结构·算法·蓝桥杯
longlong int3 小时前
【每日算法】Day 9-1:贪心算法精讲——区间调度与最优选择(C++实现)
算法·贪心算法
张琪杭4 小时前
python算法:leetcode二叉树相关算法题
python·算法·leetcode·职场和发展