首页 > 其他分享 >map和unorderd_map的区别和联系

map和unorderd_map的区别和联系

时间:2023-12-24 09:01:07浏览次数:27  
标签:map 存储 区别 students wordFrequencies 查找 unorderd unordered

map

map是一个有序的关联容器,它存储的元素是键值对(key-value pair),并且按照键的顺序进行排序

map内部使用红黑树实现,这使得它可以在平均情况下实现O(log n)的插入、删除和查找操作。

例如,如果你想存储一些学生的姓名和对应的年龄,并按照年龄从小到大排序,那么map是一个很好的选择。

unordered_map

unordered_map是一个无序的关联容器,它也存储键值对,但是不保证元素的顺序

unordered_map内部使用哈希表实现,这使得它可以在平均情况下实现O(1)的插入、删除和查找操作。

例如,如果你想存储一些单词及其对应的频率,并需要快速地插入、删除和查找操作,那么unordered_map是一个很好的选择。

 

#include <iostream>  
#include <map>  
#include <unordered_map>  
  
int main() {  
    // 使用 map 存储学生信息  
    std::map<int, std::string> students;  
    students[18] = "Alice";  
    students[20] = "Bob";  
    students[19] = "Charlie";  
  
    // 遍历并输出学生信息  
    std::cout << "Students (ordered by age):" << std::endl;  
    for (const auto& pair : students) {  
        std::cout << pair.first << " " << pair.second << std::endl;  
    }  
  
    // 使用 unordered_map 存储单词频率  
    std::unordered_map<std::string, int> wordFrequencies;  
    wordFrequencies["hello"] = 1;  
    wordFrequencies["world"] = 2;  
    wordFrequencies["foo"] = 3;  
  
    // 遍历并输出单词及其频率  
    std::cout << "Word Frequencies (unordered):" << std::endl;  
    for (const auto& pair : wordFrequencies) {  
        std::cout << pair.first << " : " << pair.second << std::endl;  
    }  
  
    return 0;  
}
//  a1.cpp 是这个c++源文件
//  g++ a1.cpp --std=c++11 

 

 

总结一下

mapunordered_map的主要区别在于它们的内部实现、性能和排序行为。

选择使用哪种容器取决于你的具体需求,

如果需要按照键的顺序进行排序,并且性能不是最关键的问题,那么可以选择map

如果需要快速地插入、删除和查找操作,并且不关心元素的顺序,那么可以选择unordered_map

标签:map,存储,区别,students,wordFrequencies,查找,unorderd,unordered
From: https://www.cnblogs.com/music-liang/p/17923975.html

相关文章

  • java接口自动化系列(06):常用变量解析到map
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/15867903.html添加工具类常用变量解析到map,方便后面解析初始化sql或者入参的时候对变量进行替换。VariableUtil.javapackagecom.qzcsbj.autotest.utils;importcom.qzcsbj.autotest.entity.Variable;import......
  • 童年神机小霸王(七) Mapper
    Mappermapper,这个概念来源于memorymapping,又叫做MemoryManagementCircuit,它是解决地址映射的一种电路,简单来说就是决定物理内存如何映射到CPU或者PPU的地址空间。mapper可以用来支持增加卡带的RAM甚至支持额外的音频通道,但更一般的目的就是控制物理内存到地址空间的映......
  • Go 语言中 Panic 和 os.Exit 的区别
    Go语言中Panic和os.Exit的区别原创 源自开发者 源自开发者 2023-12-2307:30 发表于广东 听全文源自开发者专注于提供关于Go语言的实用教程、案例分析、最新趋势,以及云原生技术的深度解析和实践经验分享。50篇原创内容公众号在Go语言的错误......
  • 【题解】洛谷P1068 [NOIP2009 普及组] 分数线划定 (map)
    ##题目描述世博会志愿者的选拔工作正在A市如火如荼的进行。为了选拔最合适的人才,A市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的$150\%$划定,即如果计划录取$m$名志愿者,则面试分数线为排名第$m\times150\%$(向......
  • codeblock快捷键+VS code快捷键+DW_minmax文件+莱文斯坦距离+char* 和 char[]区别+可
    codeblock快捷键ctrl+G跳转。ctlr+J生成补全。cygwin用于获得开发环境。注意安装路径要对,特殊字符路径和codeblocks不兼容。codeblock返回上一处:点击光标即可。VScode快捷键ShiftAltF:vscode格式化代码CtrlShiftO:打开函数列表CtrlP:快速打开文件,或者跳到指定行Esc......
  • cloudflare,vercel and netlify的作用和区别
    Cloudflare,Vercel和Netlify都是为开发者提供的云计算服务,但它们的功能和特性有所不同。Cloudflare的主要使命是帮助构建更好的互联网。它是世界上最大的网络之一,为企业、非营利组织、博客作者和任何有互联网存在的人提供更快、更安全的网站和应用。Cloudflare的网络上有数百万......
  • Java登陆第二十九天——Servlet继承关系,service和doGet的区别
    Servlet继承关系树:Servlet接口查看Servlet源码publicinterfaceServlet{voidinit(ServletConfigvar1)throwsServletException;ServletConfiggetServletConfig();voidservice(ServletRequestvar1,ServletResponsevar2)throwsServletException,I......
  • Spring MVC 源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
    HandlerMapping组件HandlerMapping组件,请求的处理器匹配器,负责为请求找到合适的 HandlerExecutionChain 处理器执行链,包含处理器(handler)和拦截器们(interceptors)handler 处理器是Object类型,可以将其理解成HandlerMethod对象(例如我们使用最多的 @RequestMapping 注解所标......
  • Pix4Dmapper空间三维模型的应用实例:GIS选址分析
      本文介绍基于无人机影像建模完成后的结果,利用ArcMap软件进行空间选址分析,从而实现空间三维模型应用的方法。目录1空间分析目标确立2基于基本约束条件的选址求解2.1坡度计算与提取2.2海拔提取2.3LAS数据初探2.4淹没分析2.5区域相交2.6面积约束3基于择优条件的选址求......
  • Mapmost Alpha,一款非常好用且强大的三维城市创建工具~!
    一、MapmostAlpha介绍Hello,各位铁铁,今天给大家推荐一款好用的三维城市场景创建工具。这款产品主要用于创建三维的城市场景,一款快速构建空间场景轻应用的在线创作平台。原生兼容云上云下多源异构数据,具备丰富的可视化组件、海量城市底板、便捷的配置管理工具、全面的可定义对象属......