【开发内功】STL unordered_map学习

admin 2024年3月18日16:18:35评论6 views字数 1920阅读6分24秒阅读模式
【开发内功】STL unordered_map学习

unordered_map简介

【开发内功】STL unordered_map学习
std::unordered_map 是 C++ 标准库中实现的一个关联容器,用于存储键值对。它提供了类似于字典的功能,可以按键(key)存储和检索值(value)。这个容器使用哈希表来实现,因此它的主要优势在于高效的存取操作。

【开发内功】STL unordered_map学习

主要特点:
  • 哈希表实现:键通过哈希函数转换成索引,将元素分布在内部存储桶中,实现快速访问。
  • 键值对无序:std::unordered_map 不维护元素的顺序,元素的排列顺序依赖于哈希函数和存储解决冲突的方法。
  • 键唯一:每个键在unordered_map中是唯一的,不能有两个相同的键存在。
  • 动态扩展:容器会根据元素数量自动调整大小,确保哈希表的效率。
基本操作:
  • insert(): 插入一个键值对,如果键已存在则不会插入。
  • emplace(): 直接在容器中构造键值对,避免额外的复制或移动操作。
  • [ ]: 访问给定键对应的值,如果键不存在则会插入该键并初始化其值。
  • at(): 访问给定键对应的值,如果键不存在则抛出std::out_of_range异常。
  • size(): 返回容器中键值对的数量。
  • empty(): 检查容器是否为空,即是否包含0个键值对。
  • clear(): 移除所有键值对,清空容器。
  • erase(): 移除一个给定键的键值对。
  • find(): 查找一个键,如果找到,则返回一个迭代器指向键值对;如果未找到,则返回指向容器末尾的迭代器。
  • count(): 返回给定键在容器中的数量(由于unordered_map键的唯一性,结果为0或1)。
【开发内功】STL unordered_map学习

实例讲解

【开发内功】STL unordered_map学习
  • 首先需要导入对应的头文件

#include <unordered_map>
  • 然后可以向unorfer_map中插入元素并遍历:

// 创建一个unorder_mapstd::unordered_map<std::string, int> umap;// 插入元素umap.insert({"apple", 2});umap.emplace("banana", 4);// 遍历unordered_mapfor (const auto& pair : umap) {    std::cout << pair.first << " has count " << pair.second << std::endl;}

【开发内功】STL unordered_map学习

  • 下面给出完整的示例代码:

#include <iostream>#include <unordered_map>#include <string>int main() {    // 创建一个unordered_map,键是字符串,值是int    std::unordered_map<std::string, int> umap;    // 插入元素    umap.insert({"apple", 2});    umap.emplace("banana", 4);    // 通过索引操作符[]插入或修改元素    umap["orange"] = 5;    // 如果键不存在,将创建新元素    umap["apple"] = 10; // 更新已有键的值    // 访问元素    std::cout << "apple: " << umap["apple"] << std::endl; // 输出: apple: 10    // 使用at()访问元素,如果键不存在会抛出异常    try {        std::cout << "banana: " << umap.at("banana") << std::endl; // 输出: banana: 4    } catch (const std::out_of_range& e) {        std::cerr << "Key not found: " << e.what() << std::endl;    }    // 检查某个键是否存储在容器中    if(umap.find("kiwi") != umap.end()) {        std::cout << "kiwi exists in the map." << std::endl;    } else {        std::cout << "kiwi does not exist in the map." << std::endl;    }    // 遍历unordered_map    for (const auto& pair : umap) {        std::cout << pair.first << " has count " << pair.second << std::endl;    }    // 检查容器是否为空    if (!umap.empty()) {        std::cout << "The map is not empty." << std::endl;    }    // 查看容器中的元素数    std::cout << "The map has " << umap.size() << " elements." << std::endl;    // 删除元素    umap.erase("banana");    // 清空容器    umap.clear();    return 0;}

原文始发于微信公众号(赛博安全狗):【开发内功】STL unordered_map学习

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年3月18日16:18:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【开发内功】STL unordered_map学习http://cn-sec.com/archives/2584793.html

发表评论

匿名网友 填写信息