加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用C中的自定义比较函数初始化多集

发布时间:2020-12-16 04:54:44 所属栏目:百科 来源:网络整理
导读:考虑以下比较功能: bool compare(std::shared_ptrmyObject lhs,std::shared_ptrmyObject rhs){ return lhs-value rhs-value;} 现在的想法是初始化std :: shared_ptr myObject类型的多集合.订购具有上述功能的元素.所以从我读过的书中应该这样做: std::mult
考虑以下比较功能:
bool compare(std::shared_ptr<myObject> &lhs,std::shared_ptr<myObject> &rhs){
   return lhs->value < rhs->value;
}

现在的想法是初始化std :: shared_ptr< myObject>类型的多集合.订购具有上述功能的元素.所以从我读过的书中应该这样做:

std::multiset<std::shared_ptr<myObject>,decltype(compare)*> myset{compare};

题:

我的问题是,在声明中我简单地传递了一个函数指针来引用比较函数,但为什么我们使用{compare}来启动集合?它的重要性是什么?为什么有必要这样做?

解决方法

因为该集需要比较仿函数才能使用.如果你没有指定一个,它将构成一个默认构造的.在这种情况下,由于您使用的是函数指针类型,因此默认构造的类型将是一个无法调用的空指针;所以相反,你必须在运行时提供正确的函数指针.

更好的方法可能是使用函数类类型(a.k.a. functor类型);然后可以在编译时解析函数调用,并且默认构造的对象将执行正确的操作:

struct compare {
    bool operator()(std::shared_ptr<myObject> &lhs,std::shared_ptr<myObject> &rhs) const {
        return lhs->value < rhs->value;
    }
};

std::multiset<std::shared_ptr<myObject>,compare> myset;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读