指向成员函数的指针 - C++ std::list 排序

2024-01-19

如何将指向成员函数的指针传递给 std::list.sort()?

这可能吗?谢谢

struct Node {
       uint32_t ID;
       char *   Value;
};

class myClass {
          private:
            uint32_t  myValueLength;
          public:
            list<queueNode *> MyQueue;
            bool compare(Node * first, Node * second);
            bool doStuff();
}

bool myClass::compare(Node * first, Node * second) {
    unsigned int ii =0;
    while (ii < myValueLength)
    {
        if (first-> Value[ii] < second-> Value[ii]) 
        {
            return true;
        } else if (first-> Value[ii] > second-> Value[ii])
        {
            return false;
        }

        ++ii;
    }

    return false;
}

bool myClass::doStuff()
{
    list.sort(compare);
}

我想在类中使用长度变量,而不是在比较函数中执行 strlen() (值将始终是相同的长度)

编辑: myValueLength 不是我想从比较函数中访问的唯一变量,我只是简化了它以使示例更短。


详细阐述grieve's https://stackoverflow.com/questions/639100/pointer-to-member-functions-c-stdlist-sort/639112#639112响应,为什么不使用函子?例如。:

struct Functor
{
  bool operator()( char * a, char * b )
    { return strcmp(a,b) < 0; }
};

然后你就可以使用:

Functor f;
myList.sort(f);

你甚至可以通过定义operator()来使用你的类作为Functor...

class myClass {
  ...
  bool operator()( queueNode * a, queueNode * b )
  { return compare( a, b ); }

  void doStuff() { MyQueue.sort(*this); }
};

简单示例代码:

#include <iostream>
#include <list>
using namespace std;

  // Assumes  TYPE t; cout << t;  is valid.
template<class TYPE>
inline ostream & operator<< ( ostream & theOstream,
                              const list<TYPE> & theList )
{
  typename list<TYPE>::const_iterator listIterator = theList.begin();
  for ( int i = 0;   listIterator != theList.end();  listIterator ++, i ++ )
    theOstream << "    [" << i << "]:   \"" << (*listIterator) << "\"" << endl;
  return theOstream;
}

struct Functor
{
  bool operator()( const char * a, const char * b )
    { return strcmp(a,b) < 0; }
};

int
main()
{
  list<char*>  l;

    /* Load up some example test data... */
  char  s[3];
  s[2] = '\0';
  for (   s[0]='c'; s[0]>='a'; s[0]-- )
    for ( s[1]='c'; s[1]>='a'; s[1]--  )
      l.push_back(strdup(s));

    /* Show us that test data... */
  cout << l << endl;

    /* Sort list. */
  Functor f;
  l.sort(f);

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

指向成员函数的指针 - C++ std::list 排序 的相关文章

随机推荐

  • “定义”数组元素的计数

    给定以下数组 var arr undefined undefined 2 5 undefined undefined 我想得到元素的数量are定义 即 那些是not undefined 除了循环遍历数组之外 还有什么好的方法吗 在最近的浏览
  • 为 Mac 版 docker 指定 IP 地址

    我在用着Mac 版 Docker 测试版它远离聚光灯 有什么方法可以从控制台运行它或强制使用任何配置文件来指定 docker 主机的 IP 地址 现在它从 192 168 64 3 更改为 192 168 64 5 每次启动 docker
  • 模型视图控制器设计模式代码示例

    我正在研究模型 视图 控制器设计模式 并且从理论上理解了该模式背后的概念 但我想了解一下人们如何实际将其付诸实践 维基百科提到了 Wt Web 工具包 CppCMS 和其他一些使用该模式的标准实现 但是我对这些并不熟悉 我只是希望和 如果有
  • 非交换的 symify(或简化)

    我希望能够简化 Python 中字符串的数学表达式 有几种 可交换 的方法可以做到这一点 是否有一个不可交换的函数 我知道sympify from sympy可以做一些非交换工作 这里有一个例子 from sympy import x Sy
  • 如何从magento中的愿望清单集合中删除项目

    在 Magento 中 我想删除或删除当前登录用户的愿望清单项目 目前 我通过启用复选框来选择愿望清单项目 然后使用 Mage getModel wishlist item gt load id gt delete 删除它们 我使用的代码片
  • 带类型参数的 PetaPoco 查询

    使用 PetaPoco 如何调用带有类型参数的存储过程 在 C 中我这样做 cmd Parameters Add email SqlDbType NVarChar Value email 查看文档 http www toptensoftwa
  • 有什么理由不使用 OrderedDict 吗?

    我指的是有序字典 http docs python org 2 library collections html collections OrderedDict来自collections模块 这是一个有序字典 如果它具有可订购的附加功能 我
  • 在 ag-grid 中显示嵌套 json

    我正在使用 Angular Grid ag grid 来显示数据 我正在尝试在我的角度网格中显示嵌套的 json 数据 但我没有成功 下面是示例 json 数据和 colDefs 请建议为什么点运算符不像 jqgrid 那样工作 无法使用嵌
  • 如何为 JTable 列添加 JXDatepicker

    我正在使用 JTable 我有一个日期列 当我单击一个单元格时 我需要在其中显示一个 JXDatePicker 以便我可以从中选择一个日期 有人可以告诉我该怎么做吗 谢谢 等待一个答复 你可能应该使用DatePickerCellEditor
  • 使用弧线和动态属性覆盖设置器

    我需要在 setter 方法中做一些额外的事情 但这样做时我遇到了无限循环 我有一个核心数据对象 interface Transaction NSManagedObject property nonatomic retain NSDate
  • 以纯文本形式将用户 ID 发送到前端是否安全?

    我有一个带有 MongoDB 的 Express 应用程序 它为每个用户文档创建一个用户 ID 该用户 ID 也以 jwt 进行编码 这给新开发人员造成了一种错觉 即用户 ID 不能以纯文本形式发送到前端 有人可以解释一下将用户 ID 发送
  • 将 mongoengine 与多处理结合使用 - 如何关闭 mongoengine 连接?

    无论我尝试什么 当尝试在 mongoengine 数据库上使用多处理时 我都会遇到有关不分叉活动 mongo 连接的 MongoClient 在 fork 之前打开 警告 这标准蒙戈建议 http api mongodb com pytho
  • 为什么类模板构造函数参数不自动确定? [复制]

    这个问题在这里已经有答案了 考虑下面的类 template
  • 调整 mat-form-field Angular Material 的高度

    我遇到了一个简单调整保存自动完成输入的 mat form field 的问题 从图像中您可以看到它是否超出了垫子工具栏的高度 但我还没有找到一种简单的方法来调整整个输入的高度 以便它可以保留在工具栏区域内 宽度效果很好 身高没有 在工具栏外
  • 使用 django-rest-framework 获取模型的随机对象

    在我的 Django 项目中 我需要提供一个视图以使用 django rest framework 从模型中获取随机对象 我有这个 ListAPIView class RandomObject generics ListAPIView qu
  • 如何选择具有与给定值列表完全匹配的外键的主键?

    例如 pk ref fk 1 a 1 b 1 c 2 a 2 b 2 d 如何执行类似 伪 查询的查询 select distinc pk ref where fk in all a c 返回的查询结果必须与列表中外键的所有给定值匹配 结果
  • 如何授予 ASP.NET MVC 应用程序对注册表项的读取访问权限?

    我读过其他关于如何实现此目标的帖子 但无济于事 当我将应用程序部署到服务器 2008 时 我在运行时遇到以下异常 Access to the registry key HKEY CURRENT USER Software Microsoft
  • 如何在 Zend Framework 中使用依赖注入?

    目前我正在尝试学习Zend Framework 因此我购买了 Zend Framework in Action 这本书 在第 3 章中 介绍了基本模型和控制器以及它们的单元测试 基本控制器如下所示 class IndexController
  • 帐户 ssh-key 与部署 ssh-key 之间的区别

    有人可以解释一下帐户 ssh key 与部署 ssh key 之间有什么区别吗 我经常使用它们 但从未尝试了解它们有何不同 Your ssh 帐户密钥 does 识别您的身份 并允许您像您一样与 GitHub 进行交互 例如 您可以推送到您
  • 指向成员函数的指针 - C++ std::list 排序

    如何将指向成员函数的指针传递给 std list sort 这可能吗 谢谢 struct Node uint32 t ID char Value class myClass private uint32 t myValueLength pu