首页 > 其他分享 ><unordered_map>

<unordered_map>

时间:2024-12-26 17:56:05浏览次数:5  
标签:std map 元素 哈希 myMap unordered

在C++中,<unordered_map>是标准模板库(STL)的一部分,提供了一种基于哈希表的键值对容器。

与std::map不同的是,<unordered_map>不保证元素的排序,但是通常提供更快的查找速度。

<unordered_map>是一个关联容器,他存储了键值对(Key_value pairs),其中每个键都是唯一的,<unordered_map>用哈希表来存储元素,这使得他在查找、插入和操作中具有常数时间复杂度。

语法

以下是unordered_map的基本用法:

#include<unordered_map>

std::unordered_map<ket_type,value_type> map_name;

        key_type是键的类型

        value_type是值的类型

构造函数

//默认构造:

std::unordered_map<int,std::string> myMap;

//构造并初始化

std::unordered_map<int,std::string> myMap={{1,"one"},{2,"two"}};

//构造并指定初始容量

std::unordered_map<int,std::string> myMap(10);

//构造并复制另一个

std::unoredered_map<int,std::string> other=myMap;

基本操作

插入元素:

MyMap.insert({3,"three"});

访问元素:

std::string value=myMap[1]; //获取键为1的值

删除元素:

myMap.erase(1);  //删除键为1的元素

查找元素:
auto it=myMap.find(2) // 查找键为2的元素

if(it!=myMap.end()){

std::cout<<"Found"<<it->second<<std::endl;

}

#include <iostream>
#include <unordered_map>

int main() {
    // 创建一个 unordered_map,键为 int,值为 string
    std::unordered_map<int, std::string> myMap;

    // 插入一些键值对
    myMap[1] = "one";
    myMap[2] = "two";
    myMap[3] = "three";

    // 打印所有元素
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    // 访问特定键的值
    std::cout << "Value for key 2: " << myMap[2] << std::endl;

    // 删除键为1的元素
    myMap.erase(1);

    // 再次打印所有元素
    std::cout << "After erasing key 1:" << std::endl;
    for (const auto& pair : myMap) {
        std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
    }

    return 0;
}

注意事项

  • unordered_map 不保证元素的顺序,因此元素的迭代顺序可能在不同的运行中不同。
  • 哈希表的性能依赖于良好的哈希函数,以避免过多的哈希冲突。
  • 与 std::map 相比,unordered_map 在元素数量较少时可能占用更多的内存。

标签:std,map,元素,哈希,myMap,unordered
From: https://blog.csdn.net/2301_81394465/article/details/144723430

相关文章

  • 在HashMap与ConcurrentHashMap红黑树的好处
    对HashMap的好处提高查找效率当哈希冲突比较严重时,链表会变得很长。在一个长链表中查找元素,时间复杂度会退化为(是链表长度)。而红黑树是一种自平衡二叉查找树,其查找、插入和删除操作的时间复杂度在最坏情况下依然能保持为。将链表转换为红黑树后,能有效降低在哈希冲突较多的桶......
  • MapReduce初级编程实践
            直接看出现的问题:  ......
  • 12.23 每日总结(hashmap和hashset)
    今天在做面试题,看到又问hashmap和hashset的区别。HashMap的底层数据结构HashMap在Java中的底层数据结构是一个数组和链表(或红黑树)的组合。具体来说,它是基于一个数组结构,数组中的每个元素是一个链表的头节点。当发生哈希冲突时,即不同的键映射到同一个数组索引位置,这些键值对......
  • Application run failed .ParserException: while parsing a block mapping in 'reade
    [root@ecm-8cc1logs]#tail-f-n1000sys-error.log17:26:46.060[main]ERRORo.s.b.SpringApplication-[reportFailure,870]-Applicationrunfailedorg.yaml.snakeyaml.parser.ParserException:whileparsingablockmappingin'reader',line2,col......
  • MFC中CBitmap、CBrush、CFont、CPalette、CPen、CRgn删除GDI对象问题
    CBitmap、CBrush、CFont、CPalette、CPen、CRgn均继承自CGdiObject,CDI对象属于CGdiObject,在该类的析构函数中会释放,因此CBitmap、CBrush、CFont、CPalette、CPen、CRgn不必要显式调用DeleteObject()。如果GDI对象在在堆上分配的,则在特定时刻需要删除它,以便执行其析构函数。参考:......
  • vue3 - vite 对于是否生成 xxx.js.map文件的开关设置-总结
    有3个办法可以设置不生成map文件1.package.json文件里的打包语句"build:docker":"vue-tsc--noEmit&&vitebuild--modedev",中,添加--noEmit参数,则不会生成map包2.vite.config.ts文件里的build.sourcemap属性,设置为false,则不会生成map包3.tsconfig.json文件里的c......
  • golang中线程安全的map
    golang中线程安全的两种数据结构:channelsync.Map保证线程安全可以使用sync包下面的互斥锁sync.Mutex读写锁sync.RWMutex原子操作sync.atomicmap的底层原理count:key的数量flags:是否进行写操作B:桶的数量,它是以2为底的对数,即2的B次方hash0:哈希因子buckets:桶的列表,一个bma......
  • SQLMAP注入之MySQL注入总结
    SQLMAP注入之MySQL注入总结简介sqlmap是一个开源的自动化SQL注入(SQLi)攻击和数据库接管工具,广泛应用于渗透测试、漏洞评估和安全研究。它旨在帮助安全研究人员和渗透测试人员发现和利用SQL注入漏洞,进行数据库接管、信息泄露和数据提取等操作。sqlmap提供了强大的功能,可以......
  • LFImap:本地文件包含发现和利用工具
    免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。简介:LFImap是一个针对本地文件包含发现和利用的工具,该项目处于预alpha阶段。主要版本1.0即将推出,其中包含大量新功能和模块......
  • 模拟 AutoMapper 在单元测试中的应用:_mapperMock.Setup 详解
    模拟AutoMapper在单元测试中的应用:_mapperMock.Setup详解在单元测试中,我们经常需要模拟一些外部依赖的行为,比如数据库操作、网络请求或是映射工具。AutoMapper是.NET中广泛使用的对象映射库,它将一个类型的对象转换为另一个类型的对象。为了在单元测试中有效地验证业务逻辑,......