C++ 动态分配 std::map 比较器

2023-12-05

因此,我有两个包含 std::map 成员的类,其功能实际上相同,只是一个映射的顺序是 std::less,另一个映射的顺序是 std::greater。

如果我创建一个抽象父类并声明一个映射成员,是否有任何方法可以在派生类构造函数中动态分配该成员的比较器?这样,功能显然可以全部驻留在父类中。


您无法在事后更改比较器。但是您可以使用相同的比较器类,并在构造时获得“更大”或“更少”。你只需要一个有状态的比较器:

struct my_compare {
    enum compare_type { less, greater };
    explicit my_compare(compare_type t) : m_type(t) {}
    template<class T, class U>
    bool operator()(const T& t, const U& u) const {
        if(m_type == less) { return t < u; }
        else { return t > u; }
    }
    compare_type m_type;
};

然后你可以做

std::map<int, int, my_compare> less_map((my_compare(my_compare::less)));
std::map<int, int, my_compare> greater_map((my_compare(my_compare::greater)));

额外的一对括号是因为否则这将是最令人烦恼的解析,即使函数参数声明不能​​有限定名称。在 C++11 中,列表初始化 (my_compare{mycompare::less}) 可以用来代替。


对于您的特定设计,实现可能如下所示

class A {
protected:
    explicit A(my_compare::compare_type ct) : my_map(my_compare(ct)) {}
    std::map<int, int, my_compare> my_map;
};

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

C++ 动态分配 std::map 比较器 的相关文章

  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 为什么大多数 C 开发人员使用 Define 而不是 const? [复制]

    这个问题在这里已经有答案了 在许多程序中 define与常量具有相同的用途 例如 define FIELD WIDTH 10 const int fieldWidth 10 我通常认为第一种形式优于另一种形式 它依赖于预处理器来处理基本上是
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用

    我正在尝试将我的项目从 UseMVC asp net core 2 2 兼容样式 升级到 UseEndpoint Routing 并且我的所有请求都被重定向到我的验证失败页面 它与声明有关 如果我删除 Authorize Roles Adm
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 访问者和模板化虚拟方法

    在一个典型的实现中Visitor模式 该类必须考虑基类的所有变体 后代 在许多情况下 访问者中的相同方法内容应用于不同的方法 在这种情况下 模板化的虚拟方法是理想的选择 但目前这是不允许的 那么 模板化方法可以用来解析父类的虚方法吗 鉴于
  • 如何从 C# 控制器重定向到外部 url

    我使用 C 控制器作为网络服务 在其中我想将用户重定向到外部网址 我该怎么做 Tried System Web HttpContext Current Response Redirect 但没有成功 使用控制器的重定向 http msdn
  • ASP MVC:服务应该返回 IQueryable 的吗?

    你怎么认为 你的 DAO 应该返回一个 IQueryable 以便在你的控制器中使用它吗 不 您的控制器根本不应该处理任何复杂的逻辑 保持苗条身材 模型 而不是 DAO 应该将控制器返回给视图所需的所有内容 我认为在控制器类中看到查询 甚至
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 如何挤出平面 2D 网格并赋予其深度

    我有一组共面 连接的三角形 即二维网格 现在我需要将其在 z 轴上挤出几个单位 网格由一组顶点定义 渲染器通过与三角形数组匹配来理解这些顶点 网格示例 顶点 0 0 0 10 0 0 10 10 0 0 10 0 所以这里我们有一个二维正方
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • Chrome 扩展程序中的弹出窗口

    我正在编写一个 Chrome 扩展程序 我希望当用户单击上下文菜单时弹出一个登录窗口 以便用户可以输入用户名和密码 在 Chrome 扩展中 我只发现chrome pageAction setPopup and chrome browser
  • ofstream 不将缓冲区写入文件

    我正在尝试将 buf 指针的内容写入由 ofstream 创建的文件 由于某种原因 文件是空的 但是 buf 的内容从来不为空 我做错了什么 void DLog Log const char fmt va list varptr va st
  • createStoredProcedureQuery 未解决

    这是我的代码 createStoredProcedureQuery 在 eclipse 下有红线 并且没有解决 我尝试了很多方法仍然无法得到问题所在 private static EntityManagerFactory factory p
  • Erlang Ports:与类似“wc”的程序交互?

    我有一个外部 exe 程序 它从标准输入读取并生成结果 它的工作原理就像wc编程并读取直到EOF 或者更确切地说 流结束 Update 让我再添加一条解释 我基本上是在尝试编写一个 Erlang 管道 我可以在批处理文件中调用该程序 例如e
  • 如何将函数的值输出到调用者而不是控制台

    假设我有这个简单的 PowerShell 函数 function testit return true gt null Write Host testing thistest testit Write Host value thistest
  • 为Python脚本提供远程shell

    我想创建一种方便简单的方法来远程连接到正在运行的 Python 脚本 通过文件套接字 TCP 或其他方式 以获得远程交互式 shell 我认为通过 IPython 之类的东西这会很容易 然而 我并没有真正找到任何好的例子 我尝试开始IPyt
  • 更改 ggplot 中点的颜色填充和形状[重复]

    这个问题在这里已经有答案了 我想改变 ggplot 中点的形状和颜色填充 这是我部分工作的代码 颜色图例仍然是黑色 ID lt rep c KO WT each 4 O lt rep c HP NN each 2 times 2 Methi
  • Snow Leopard 上的 Xcode 4.5 和 iOS 6

    我希望开始 iOS 6 开发 我很久以前就在 iOS 4 上进行了开发 现在我的机器上运行着 Xcode 4 2 我还有一些以前的 iOS 版本的项目 我想下载最新的开发人员版本 Xcode 4 5 iOS 6 并开始在我的系统上进行开发
  • 使用 BULK INSERT 未正确导入重音字符

    我正在导入源 CSV 文件 我不知道源编码 只能看到其中之一 ANSI 编码 或 UTF8 without BOM 编码 当我打开文件时Notepad 相关问题 该文件已导入数据库mssql 2008 using bulk insert D
  • AngularJS:复制与扩展

    解释 我们遇到过一些情况 需要将一个对象复制到另一个对象 在这种情况下 我们可能有两种解决方案 角度 copy or 角度 extend 我面临的挑战 据我们所知angular copy source destination 创建源对象的深
  • 为什么这两个相同的内联 div 未对齐,而其中一个有文本而另一个没有?

    所以这里有两个相同的 div HTML div div div div CSS left right width 100px height 40px border 1px solid gray display inline block 这些
  • Angular 不支持 IE10 中的输入类型=“range”

    当 HTML5 的值
  • 如何为与 www 相同的域创建 localStorage。同时还是下次访问时?

    我创建了一个 JS 文件 并将其放置在我以外的其他网页中 所以我的是domain 1 com 我将其放置到domain 2 com 和domain 3 com 这个JS包含jsonp 我成功地将一些数据从他们的页面保存到我的数据库中 另外
  • Carrierwave 程序上传

    现在 在我的 Rails 应用程序中 我正在使用 Carrierwave 将文件上传到 Amazon S3 我正在使用文件选择器和表单来选择并提交文件 这效果很好 不过 我现在正尝试通过 iPhone 应用程序发帖 并且正在接收文件的内容
  • 使用具有可变数量参数的 Scipy curve_fit 进行优化

    假设我们有下面的函数来优化 4 个参数 我们必须如下编写函数 但如果我们想要具有更多参数的相同函数 我们必须重写函数定义 def radius z a0 a1 k0 k1 k np array k0 k1 a np array a0 a1
  • 在 React 中编辑多个输入字段

    请检查此代码https stackblitz com edit react koqfzp file src Section js 每次我添加一个项目时 我也会添加一个我想要编辑的随机数 该数字在 MUI 文本字段组件中呈现
  • 如何在不阻塞的情况下从套接字读取数据

    我在处理服务器时遇到问题 向我发送初始 问候标头 smtp 服务器 我需要在发送任何命令并从服务器接收任何答案之前读取此标头 但我不知道如何执行此操作 因为 Julia 似乎缺乏在不阻塞的情况下从 IO 流读取的可能性 read 命令及其类
  • Powershell 中的 RegKey 问题

    我在使用 Powershell 中的注册表项时遇到问题 密钥 T E S T 由未知进程生成 然后我尝试使用以下方法覆盖它 Path setting grouplocators Name T E S T New Item Path Path
  • 如何从串行 python 脚本使用 mpi4py 应用程序

    我尝试制作一个基于 mpi4py 的库 但我想在串行 python 代码中使用它 python serial source py 但里面序列源 py存在一些名为的函数平行杆 from foo import parallel bar Can
  • C++ 动态分配 std::map 比较器

    因此 我有两个包含 std map 成员的类 其功能实际上相同 只是一个映射的顺序是 std less 另一个映射的顺序是 std greater 如果我创建一个抽象父类并声明一个映射成员 是否有任何方法可以在派生类构造函数中动态分配该成员