为 C++ 指针集定义运算符<

2023-12-02

我正在尝试编写 C++ STL 集,它保留指向我的自定义类的指针。但我不明白当我使用指针而不是类的对象时如何重载

我读到,如果我们重载 set 用于比较的

当您使用operator()函数创建一个结构并将其传递给集合时,我遇到了这个技巧,例如set<Object, Comparator>。但我仍然不明白它是如何工作的,因为 set 只使用 less-comparison。

#include <iostream>
#include <set>

using namespace std;

class Node
{
    int x;

    public:
    Node(int x)
    {
        this->x = x;
    }

    bool operator<(const Node& n) const
    {
        cout << "inside operator<" << endl;
        return this->x < n.x;
    }
};

int main()
{
    set<Node*> s;

    Node n1(10);
    Node n2(11);

    s.insert(&n1);

    auto res = s.find(&n1);
    if (res == s.end())
    {
        cout << "not found";
    }
    else
    {
        cout << "found";
    }

    return 0;
}

代码结果为found. Why?

我乐意去学:

  • How use set与指针。
  • 如何超载operator<适当地。

You 可能不会想要改变bool operator <(Node *, Node *)。相反,您应该寻求提供非默认的Compare给你的set.

template <typename T>
struct pointee_less
{
    bool operator()(T* lhs, T* rhs) const
    {
        return (lhs && rhs) ? std::less<T>{}(*lhs, *rhs) : std::less<T*>{}(lhs, rhs);
    }
}

template <typename T>
using pointer_set = std::set<T*, pointee_less<T>>;

int main()
{
    pointer_set<Node> s;

    Node n1(10);
    Node n2(11);

    s.insert(&n1);

    auto res = s.find(&n1);
    if (res == s.end())
    {
        cout << "not found";
    }
    else
    {
        cout << "found";
    }

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

为 C++ 指针集定义运算符< 的相关文章

  • 更新面板工作速度非常慢

    我正在编写一个用户可以注册的应用程序 注册时 可以选择多个选项 并根据这些注册字段可见或不可见以及是否必需 我想出了一个想法 所有字段都将位于 updatePanel 中 当用户更改注册选项时 我将在服务器端设置这些字段的可见性 它可以工作
  • 在 HKCR 中创建新密钥有效,但不起作用

    我有以下代码 它返回 成功 但使用两种不同的工具使用搜索字符串 3BDAAC43 E734 11D5 93AF 00105A990292 搜索注册表不会产生任何结果 RegistryKey RK Registry ClassesRoot C
  • MVC3中设置下拉列表中的所选项目

    我必须为视图中的下拉列表设置所选项目 但它不起作用 View div class editor label Html LabelFor model gt model Gender div div class editor field Htm
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 如何将 SOLID 原则应用到现有项目中

    我对这个问题的主观性表示歉意 但我有点卡住了 我希望之前处理过这个问题的人能够提供一些指导和建议 我有 现在已经成为 一个用 C 2 0 编写的非常大的 RESTful API 项目 并且我的一些类已经变得巨大 我的主要 API 类就是一个
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 在 .NET MAUI 中实现 TouchTracking

    我一直致力于将我们的应用程序从 Xamarin Forms 迁移到 NET MAUI 我们的应用程序几乎没有绘图功能 用户可以用手指进行绘图 我们用了TouchTrackingXamarin Forms 中的 nuget 包 但与 NET
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • 在 C# 中为父窗体中的子窗体控件添加事件处理程序

    我有两种形式 一种是带有按钮和文本框的父表单 单击该按钮时 将打开一个对话框 该子窗体又包含一个文本框和一个按钮 现在我想要的是 每当子表单文本框中的文本更改时 父表单文本框中的文本会自动更改 为了获得这个 我所做的是 Form3 f3 n
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • Oauth2中如何同时撤销RefreshToken和使AccessToken失效

    我正在使用 Owin Oauth2 授权和资源服务器相同 开发单页面应用程序 AngularJS Net MVC Json Rest API 的身份验证流程 我选择了 Bearer Token 路由而不是传统的 cookie session
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 代码中的.net Access Forms身份验证“超时”值

    我正在向我的应用程序添加注销过期警报 并希望从我的代码访问我的 web config 表单身份验证 超时 值 我有什么办法可以做到这一点吗 我认为您可以从 FormsAuthentication 静态类方法中读取它 这比直接读取 web c

随机推荐

  • 每个请求都快速更改会话

    我有一个登录功能 app post doLogin function req res db users findOne username req body username function err user if err console
  • Vue - 将一个元素的宽度设置为等于另一个元素的宽度

    我正在尝试使用 Vue 动态地将最里面元素的宽度设置为等于最外面元素的宽度 div class row div class col xs 12 div class card mb 2 div class banner banner tag
  • 名称 [jdbc/mydb] 未在此上下文中绑定

    我发现这个问题已经被提出过好几次了 我也经历了所有这些问题 但我仍然无法解决我的问题 谁能帮我查明我做错了什么 当我尝试访问database jsp时收到以下错误消息 HTTP Status 500 An exception occurre
  • 用C#模拟批处理文件

    我有一个运行四个命令的批处理文件 vsinstr coverage hello exe vsperfcmd start coverage output run coverage hello vsperfcmd shutdown 如何使用 C
  • cblas_dgemv 出现意外结果

    我有一个关于 cblas dgemv 的问题 我正在尝试了解它是如何工作的 以及我可能做错了什么 我有一个数组矩阵 然后尝试读取该矩阵 RowMajor 和 ColumnMajor 我在 RowMajor 案例中得到了预期的结果 6 2 4
  • Itertools.chain.from_iterable

    谁能向我解释一下 这段代码片段到底在做什么 chained country list set itertools chain from iterable country and countrycodes set all countries
  • 处理/删除 UTF-8 从右到左覆盖字符的最佳方法是什么?

    有一个 utf 8 字符 十六进制字节 E2 80 AE 当由启用 utf 8 的系统正确处理时 在向用户显示时将显示严格反转的字符 蛇通常用来隐藏或弄乱文件扩展名 以下是此类文件名字符串的示例 an EXE called EvilFile
  • 当我尝试在 pyqt5 中运行语音识别时,程序崩溃了

    当我尝试在 pyqt5 中运行语音识别时 程序崩溃了 Sr的代码位于另一个脚本文件中 我将其导入到 pyqt5 脚本中 我用 sr 功能连接了按钮 当我按下按钮时 sr 可以工作 但两者都会崩溃 PyQt5代码 import sys fro
  • Firebird 2.1 - 简单选择

    我想合并一些数据 但一个简单的选择示例不起作用 选择现有的表工作正常 SELECT 1 as foo 信息 can t format message 13 896 message file C xxxx firebird msg not f
  • 实体核心动态 LINQ LIKE 函数未找到[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我正在尝试使用 ZZZ 动态 LINQ 库在我的 net core 项目中使用他们网站上的示例 但我遇到了问题 使用他们自己的 JS 小提琴也会发生
  • 获取实时 Log4J 消息

    如何获取 log4j 在监控应用程序中所有 log4j 日志的中央类中正在写入的内容 Thanks 编辑 我希望我不必从日志文件中读取它 因为它会使用更多资源 您可以自己实现Appender并使用正常配置复制其上的所有日志 log4j ro
  • 使用 iconv 进行简单的 UTF8->UTF16 字符串转换

    我想编写一个函数将 UTF8 字符串转换为 UTF16 小端 问题是 iconv函数似乎没有让您提前知道需要多少字节来存储输出字符串 我的解决方案是从分配开始2 strlen utf8 然后运行iconv在循环中 增加该缓冲区的大小real
  • 随机运动pygame

    我正在尝试制作一个简单的生活模拟器 我需要 细胞 在屏幕上几乎随机移动 有一些规则 但问题是 一段时间后 它们往往会聚集在屏幕的左上角 我尝试改变很多事情 比如完全跳过规则并让它们完全随机移动 但它们仍然聚集在一起 我的代码中是否存在一些明
  • 使用jwplayer 6.11视频无法在ipad上播放

    我们使用 JW Player 6 11 来播放 mp4 和 flv 视频 但无法正常工作 ios7 iPhone 我该如何解决 iPad 的这个问题 function playvideo jwplayer mediaplayer setup
  • Android 上的 Snackbar 无需更改主题

    当我在 Android 上创建小吃栏时 出现以下错误 java lang IllegalStateException 您需要在此活动中使用 Theme AppCompat 主题 或后代 我不想将活动的主题更改为 AppCompat 有没有办
  • 从相对路径中的文件加载 C# 中的图片框图像

    我在 Windows 窗体解决方案中有一个图片框图像 用户从数据库中选择一个项目后 我想将图像加载到此图片框中 图像的文件名将来自数据库 并且所有图像必须存储在应用程序文件夹 Images 的子文件夹中 我不想在我的解决方案中包含所有这些
  • Android:如何查找屏幕的宽度和高度?

    我试图找到屏幕的宽度和高度 但我尝试过的方法都不适用于我创建的类 我的代码如下 有谁知道如何找到它 我无法使用下面尝试的方式 因为 getWidth 已被弃用 public class Crate public int acrossCrat
  • 在 LINQ 查询中的模型值中使用列表

    我正处于 ASP NET MVC 开发的非常基础的阶段 因此 有时我很难使用简单的 LINQ 查询来工作 设想 我有一个页面有一些Image并由用户对该图像发表评论 就像 Facebook 上包含用户评论的帖子一样 因此 我从文本区域保存这
  • git merge squash - 当我想要的只是我压扁的分支的更改时冲突解决

    I have github当主分支达到某种可接受的状态时 我将其推送到 github 的分支 已经这样做过一次 为此我做了 MrD MRSD c Dropbox eclipse workspaces android AndroidMonit
  • 为 C++ 指针集定义运算符<

    我正在尝试编写 C STL 集 它保留指向我的自定义类的指针 但我不明白当我使用指针而不是类的对象时如何重载 我读到 如果我们重载 set 用于比较的 当您使用operator 函数创建一个结构并将其传递给集合时 我遇到了这个技巧 例如se