1. std::unordered_map 的键要求

    • std::unordered_map 是基于哈希表的数据结构。
    • 它要求键类型必须支持哈希计算,也就是必须有对应的 std::hash 函数。
    • 另外,键类型还必须支持相等比较(通过 operator==)。

    如果键类型没有定义哈希函数(例如你自定义的 Json 类型),std::unordered_map 就无法工作,因为它不知道如何计算 Json 对象的哈希值,这会导致编译报错。

  2. std::map 的键要求

    • std::map 是基于红黑树(或其他自平衡二叉搜索树)实现的。
    • 它要求键类型必须支持严格的弱排序,也就是必须实现 operator< 或类似的比较运算符。通过这些运算符,std::map 可以根据键的顺序来组织元素。

    std::map 不需要哈希函数,因此即使键类型没有 std::hash 定义,只要能进行比较,它就可以正常工作。

总结:

  • std::unordered_map 依赖哈希表存储键值对,因此要求键类型必须提供哈希函数(通过 std::hash 实现)和相等比较(operator==)。
  • std::map 依赖排序的树结构存储键值对,因此只需要键类型支持比较(通常通过 operator< 实现)。
  • 尽量不要自定义类作为key,会有很多麻烦

map&unordered_map<key,value>key使用自定义类的要求的更多相关文章

  1. Python——dict(自定义类作key)

    Python的dict要求key为不可变数据类型,通常采用str或int,但在某些应用场景下,需要采用自定义类型对象作key, 此时的自定义类需要实现两个特殊方法:__hash__.__eq__,用于 ...

  2. How to: Map a Persistent Class to a Database View Which Has No Key Field如何:映射持久化类到无主键数据库视图

    With XAF, you can build new applications from scratch or maintain existing databases. The How to: Ge ...

  3. (转).Net中自定义类作为Dictionary的key详解

    在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...

  4. foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

    http://zhangxiong0301.iteye.com/blog/2242723 最近有个需求,就是使用mybatis时,向mysql中插入数据,其参数为map类型,map里面的key为列名, ...

  5. Map排序(按key排序,按value排序)

    主要分两种,按键排序.按值排序. 而且,按key排序主要用于TreeMap,而按value排序则对于Map的子类们都适用. 一.按键排序 按Key排序主要用于TreeMap,可以实现按照Key值的大小 ...

  6. Jackson中处理map中的null key 或者null value 及实体字段中的null value

    1.map中有null key时的序列化  当有null key时,jackson序列化会报 Null key for a Map not allowed in JSON (use a convert ...

  7. STL源码中map和set中key值不能修改的实现

    前言 最近正好刚刚看完,<stl源码剖析>这本书的map和set的源码部分.但是看完之后又突然发现,之前怎么没有注意到map和set容器中key不能修改是怎么实现的.故,特此整理如下. s ...

  8. java获取map中的最小KEY,最小VALUE

    import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.Map ...

  9. JavaScript中获取Map集合中的key和value值(前提是:既不知道key为什么值,也不知道value有哪些值)

    for(var i in maps){//通过定义一个局部变量i遍历获取map里面的所有key值 alert(maps[i]); //通过获取key对应的value值 }

  10. map put相同的key

    Map添加相同的key 2018年09月09日 10:37:12 Airport_Le 阅读数:6479   HashMap是的key是不能重复的,如果有相同的key,最后一个key对应的value会 ...

随机推荐

  1. c语言模拟Python的命名参数

    最近在书里看到的,让c语言去模拟其他语言里有的命名函数参数.觉得比较有意思所以记录一下. 目标 众所周知c语言里是没有命名函数参数这种东西的,形式参数虽然有自己的名字,但传递的时候并不能通过这个名字来 ...

  2. NPIO在指定位置插入新列(附案例和代码)

    背景: I could be mistaken as I am not that familiar with NPOI, however, after a minor search, it appea ...

  3. 【Java】SPI机制

    SPI全称: 服务供应商接口 Service Provider Interface 服务发现机制 入门概念视频来自于: https://www.bilibili.com/video/BV1E44y1N ...

  4. 【Nexus】Linux上的Maven私服搭建

    [1.安装Nexus] 需要Linux安装JDK运行,Nexus2版本JDK7,3版本JDK8 首先需要Nexus服务器文件 nexus-2.12.0-01-bundle.tar.gz 解压 tar ...

  5. 【转载】 pytorch reproducibility —— pytorch代码的可复现性

    原文地址: https://www.jianshu.com/p/96767683beb6 作者:kelseyh来源:简书 ======================================= ...

  6. 【转载】 Mobaxterm 中文输入Backspace按键问题

    版权声明:本文为CSDN博主「Flynnsin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_45830 ...

  7. python绘图库matplotlib:画线的标志marker的设置——类型/size/空心/边线颜色及大小/显示marker超出边界部分

    如题,最近有绘图的工作,要求就是使用python绘图库来画线并打上坐标点的标志,这时候就遇到了问题,这个线上的标志如果是实心的话就难以有区分度,但是设置为空心就需要考虑标志的边线粗细等问题,于是便有了 ...

  8. 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(7) —— Python版本实现的《2048》游戏的TDL算法

    <2048>游戏在线试玩地址: https://play2048.co/ 如何解决<2048>游戏源于外网的一个讨论帖子,而这个帖子则是讨论如何解决该游戏的最早开始,可谓是&q ...

  9. redis集群之哨兵模式

    redis集群之哨兵模式 1.集群部署 安装配置可参考一下地址: https://www.cnblogs.com/zhoujinyi/p/5569462.html 2.与springboot集成 这里 ...

  10. 1000T的文件怎么能快速从南京传到北京?最佳方案你肯定想不到

    今天刷面试题看到一个有意思的面试题, 1000T的文件怎么能以最快速度从南京传到北京? 网络传输 首先我们考虑通过网络传输,需要多长时间. 我特地咨询了在运营商工作的同学,目前带宽: 家庭宽带下行最大 ...