为什么 std::map 重载运算符 < 不使用 Compare

2023-11-25

From http://www.cplusplus.com/reference/map/map/operators/我注意到:

“请注意,这些操作都没有考虑任一容器的内部比较对象,而是直接比较(value_type 类型)元素。”

这就是说重载运算符“Compare在其声明中 (参考http://www.cplusplus.com/reference/map/map/)

std::map
template < class Key,                                     // map::key_type
           class T,                                       // map::mapped_type
           class Compare = less<Key>,                     // map::key_compare
           class Alloc = allocator<pair<const Key,T> >    // map::allocator_type
           > class map;

哪里的Compare is

比较:以两个元素键作为参数的二元谓词 并返回一个bool。表达方式comp(a,b), where comp是一个对象 这种类型和a and b是键值,如果满足则返回 truea是 之前考虑去b在严格的弱排序函数中 定义。地图对象使用此表达式来确定 容器中元素的顺序以及是否有两个元素 键是等效的(通过反身比较它们:它们是 等价如果!comp(a,b) && !comp(b,a))。地图中没有两个元素 容器可以有相同的键。这可以是函数指针或 一个函数对象(参见构造函数的示例)。这默认为less<T>,其返回值与应用小于运算符相同(a<b)。别名为成员类型map::key_compare.

我不太明白,为什么不直接使用Compare在“


Compare is for comparing key_type. The map's < operator is actually comparing mapped_type value_type, not key_type, so Compare would not be applicable. value_type is the pair of key_type and mapped_type.

不过说实话,我认为给地图一个operator<首先是操作符重载过度的情况。说一张地图“小于”另一张地图的含义并不是很明显。如果你想lexigraphical_compare,我建议直接调用它,或者至少在代码中记录地图比较的含义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 std::map 重载运算符 < 不使用 Compare 的相关文章

随机推荐

  • 如何将 ATL/MFC CString 转换为 QString?

    鉴于项目的编码可能是 Unicode 但不确定 将 ATL CString 转换为 QString 的最佳方法是什么 我想到的是这样的 CString c T SOME TEXT std basic string
  • 将 Guice 组件集成到 Spring 应用程序中

    我们有一个基于 Spring 框架的应用程序 需要集成使用 Google Guice 构建的组件 有人能给我们一些关于如何做到这一点的建议吗 我们遇到了以下链接 展示了如何将 Spring 集成到 Guice 中 但我们需要相反的方式 ht
  • 匹配文件对象中的多行正则表达式

    如何从文件对象 data txt 中提取此正则表达式中的组 import numpy as np import re import os ifile open data txt r Regex pattern pattern re comp
  • 一个xib,几个子类

    我有一个用于自定义 UIView 子类的 xib 文件 工作正常 我能够加载正确的 nib 并创建我的类的实例 它包含我添加到 xib 文件中的所有子视图 但是 我也对该视图进行了子类化 但我不知道如何创建此类的实例并让它使用父类使用的 x
  • 如何从apireact.js下载excel响应

    我的 api 的响应类似于此演示 URL https mytutari com webservices contract exportcallnote 10377431 如果我单击 url 它会自动下载 但是当我尝试在 axios 响应中使
  • 将整数拆分为 bin

    给定一个整数和 bin 的数量 如何将整数分成尽可能相等的部分 例如 输出的总和应等于输入整数 in x 20 num bins 3 out 7 7 6 另一个例如 in x 20 num bins 6 out 4 4 3 3 3 3 我试
  • (OpenGL 3.1 - 4.2) 动态统一数组?

    假设我有 2 个物种 例如人类和小马 它们具有不同的骨骼系统 因此每个物种的统一骨骼阵列必须有所不同 我是否必须实现两个单独的着色器程序才能正确渲染每个骨骼数组 或者是否有办法动态声明统一数组并迭代该动态数组 牢记性能 所有着色器在决策分支
  • Maven 对 JRE 的使用感到困惑

    我已经在 Eclipse 中创建了一个项目并添加了 Maven 依赖项 在 Eclipse 中 它显示我正在使用 JRE 1 5 Eclipse 中一切正常 例如 我可以运行我的测试 当我尝试跑步时mvn clean install从终端
  • OLEDB 连接没有刷新日期

    我需要以编程方式检查 Excel 中许多 OLEDB 数据连接到 SQL 表和视图的刷新日期 它们都以相同的方式配置并使用相同的连接字符串 我使用以下方式在 VBA 中检查它们 Connections OLEDBConnection Ref
  • Tkinter.PhotoImage 不支持 png 图像

    我正在使用 Tkinter 编写 GUI 并希望在Tkiner Label 所以我有一些这样的代码 self vcode img PhotoImage data open test png read format png self vcod
  • 参考 - 这个错误在 PHP 中意味着什么?

    这是什么 这是关于您在 PHP 编程时可能遇到的警告 错误和通知的一些答案 但不知道如何修复它们 这也是一个社区 Wiki 因此邀请每个人参与添加和维护此列表 为什么是这样 诸如此类的问题 标头已发送 or 调用非对象的成员 经常出现在 S
  • UIPageViewController,如何正确跳转到特定页面而不打乱数据源指定的顺序?

    我发现了一些关于如何制作的问题UIPageViewController跳转到特定页面 但我注意到跳转时存在一个额外的问题 似乎没有一个答案承认这一问题 无需深入了解我的 iOS 应用程序 类似于分页日历 的详细信息 这就是我所经历的 我声明
  • CoreData:如何按主键对 NSManagedObject 进行排序?

    我有一个 NSManagedObject 的子类 如下所示 并通过 NSManagedObjectContext 存储了一些实例 interface SomeModelObject NSManagedObject property nona
  • 在python中获取友好的设备名称

    我有一个 2 端口信号继电器通过 USB 串行接口连接到我的计算机 使用 pyserial 模块 我可以轻松控制这些继电器 然而 这是基于这样的假设 我事先知道设备分配给哪个 COM 端口 或 dev 节点 对于我正在做的项目来说 这还不够
  • 如何传递构造函数数组

    如何传递返回某种类型对象的函数数组 换句话说 构造函数数组 我想做的是这样的 constructor name string systems Array
  • StructureMap IRegistrationConvention 注册非默认命名约定?

    我目前有一堆像这样的存储库 我的存储库I另一个存储库 它们都继承自 IRepository 如果这有帮助的话 如何获取结构图以使用 IRegistryConvention 扫描仪来注册名为的具体类型 SQLMyRepositorySqlAn
  • 更改 Word 文档中所有链接的来源 - 范围错位

    我研究这段代码是为了更改 Word 模板中所有链接字段 图表 的来源到启动它的工作簿 I had 常用领域 and charts 它们存储在InlineShapes 所以每个模板都有 2 个循环 这些循环有时会卡住For Each 并继续循
  • 好处和。本地托管 jQuery 的陷阱 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我们目前正在从 google CDN 中提取 jQuery 和 jQueryUI 以及 jQueryUI CSS 库 我喜欢这个 因为我可以打电话google load jque
  • 如何创建均值和标准差data.table 中的列

    以下代码 结果让我困惑为什么 data table 对于mean函数而不是sd函数返回NA library data table test lt data frame id c 1 2 3 4 5 A seq 2 9 length 5 B
  • 为什么 std::map 重载运算符 < 不使用 Compare

    From http www cplusplus com reference map map operators 我注意到 请注意 这些操作都没有考虑任一容器的内部比较对象 而是直接比较 value type 类型 元素 这就是说重载运算符