unordered_map的用法

unordered_map 是 C++ 标准库中的一种关联容器,它存储键值对,其中键是唯一的,并且通过哈希函数组织数据以允许快速的查找、插入和删除操作。unordered_map 的元素是无序的,因为它们是根据哈希值而不是排序顺序来组织的。
下面是 unordered_map 的基本用法:

定义和初始化

#include <iostream>
#include <string>
#include <unordered_map>
int main() {
    std::unordered_map<std::string, int> map;
    // 插入键值对
    map["one"] = 1;
    map["two"] = 2;
    map["three"] = 3;
    // 初始化列表
    std::unordered_map<std::string, int> map2 = {
        {"one", 1},
        {"two", 2},
        {"three", 3}
    };
    return 0;
}

访问元素

int value = map["one"]; // 获取键为 "one" 的值

遍历

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

查找元素

auto it = map.find("two"); // 返回一个迭代器,指向键为 "two" 的元素
if (it != map.end()) {
    std::cout << "Found: " << it->second << std::endl;
} else {
    std::cout << "Not found" << std::endl;
}

删除元素

map.erase("one"); // 删除键为 "one" 的元素

哈希函数和比较函数

unordered_map 使用哈希函数来确定元素的存储位置,默认情况下,它会使用 <functional> 头文件中定义的 std::hash。你也可以提供自定义的哈希函数和比较函数。

#include <functional>
struct CustomKey {
    std::string first;
    std::string second;
    // 自定义比较函数
    bool operator==(const CustomKey& other) const {
        return first == other.first && second == other.second;
    }
};
// 自定义哈希函数
struct CustomHash {
    std::size_t operator()(const CustomKey& k) const {
        return std::hash<std::string>()(k.first) ^ std::hash<std::string>()(k.second);
    }
};
std::unordered_map<CustomKey, std::string, CustomHash> map;

在这个例子中,定义了一个自定义键类型 CustomKey 和一个自定义哈希函数 CustomHash,它们必须重载 == 运算符和哈希函数。
unordered_map 是一种高效的数据结构,适用于需要快速查找操作的场景,但它不保证元素的顺序。如果需要保持元素的插入顺序,可以使用 std::mapstd::unordered_map 的有序版本 std::unordered_map<std::string, int, std::hash<std::string>, std::equal_to<std::string>, std::allocator<std::pair<const std::string, int>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值