Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中比较器的使用+; 以下是将K排序列表合并的C++代码。但我在阅读前4行代码时感到困惑。我知道它是干什么的,只是搞不清楚它是怎么干的。谁能给我解释一下这些台词吗_C++ - Fatal编程技术网

C+中比较器的使用+; 以下是将K排序列表合并的C++代码。但我在阅读前4行代码时感到困惑。我知道它是干什么的,只是搞不清楚它是怎么干的。谁能给我解释一下这些台词吗

C+中比较器的使用+; 以下是将K排序列表合并的C++代码。但我在阅读前4行代码时感到困惑。我知道它是干什么的,只是搞不清楚它是怎么干的。谁能给我解释一下这些台词吗,c++,C++,为什么要使用struct? “operator”后面的“()”是什么意思? 为什么使用“>”而不是“你的结构比较就是所谓的函子或函数对象 它可以像函子一样使用。(在后台,如果你给它一个lambda表达式,编译器很可能会创建一个函子。)为什么要使用struct 这里没有必要使用struct,尽管它不会造成伤害 “operator”后面的“()”是什么意思 寻找操作符重载教程 为什么使用“>”而不是“为什么使用struct? 它可以是结构或类。它们本质上是相同的东西,而不是1。structs的成员是

为什么要使用struct? “operator”后面的“()”是什么意思?
为什么使用“>”而不是“你的
结构比较
就是所谓的函子或函数对象

它可以像函子一样使用。(在后台,如果你给它一个lambda表达式,编译器很可能会创建一个函子。)

为什么要使用struct

这里没有必要使用struct,尽管它不会造成伤害

“operator”后面的“()”是什么意思

寻找操作符重载教程


为什么使用“>”而不是“为什么使用struct?

它可以是
结构
。它们本质上是相同的东西,而不是1。
struct
s的成员是默认的
public
class
es的成员是默认的
private
,2。关于人们应该如何将
struct
s用于POD(普通旧数据)和
class
es用于其他所有内容的一般意见

运算符后面的“()”是什么意思?

这个很有趣<代码>。。。操作符()(…)为函数调用操作符定义重载。无论何时调用函数,都肯定会使用此运算符,将参数封装在括号内,并将返回值作为表达式的结果

另一方面,带有重载函数调用运算符的
结构
通常称为
函子


为什么要使用“>”而不是“可能重复的@aruistante:不在这里。嘎,我不是真的想关闭,我只是用它来搜索链接,因为它解释了您问题的第1部分(关于
操作符()
).The
compare
结构的sol用途是定义运算符重载,本质上使其成为函数对象。关于第2部分,它改变了排序顺序。1)命名变量
min
不是一个好主意。2)代码中的一个电流表明
ListNode*dummy=new ListNode(0)上存在内存泄漏
。我看不出你将指针值保存在哪里,以备将来使用
删除
-ion。那么我需要对2做些什么?)@NeilKirk很公平,但这意味着,我们不应该只传递这些指针(正如你在回答中提到的),或者让调用方取消引用并按引用传递(这是我更喜欢的)。在这两种情况下,它们都应该是
const
限定的。OP想要比较类型
ListNode*
,因此我认为
const
在这里不合适。可以使用
ListNode*
const
引用它(
ListNode*const&
)@anatolyg,他可以将它们作为
const ListNode*
进行比较,所以我看不出这里的问题。比较函数不会改变指向.Thx的对象。为什么…operator()(…)不表示任何运算符(><=)?@user3692521,因为该运算符正是
()
@user3692521
a==b
a.operator==(b)
a>b
a.operator>(b)
,因此
a(b)
=>
a.operator()(b)
。请注意,这只适用于用户定义的类型,并不描述内置类型上的运算符的行为。
struct compare {
    bool operator() (ListNode* &left, ListNode* &right) {
        return left->val > right->val;
    }
};

class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        priority_queue<ListNode *, vector<ListNode *>, compare> heap;
        for (int i = 0; i < lists.size(); i++) {
            if (lists[i]) heap.push(lists[i]);
        }
        ListNode *dummy = new ListNode(0);
        ListNode *cur = dummy;
        while (!heap.empty()) {
            ListNode *min = heap.top();
            heap.pop();
            cur->next = min;
            cur = min;
            if (min->next) {
                heap.push(min->next);
            }
        }
        return dummy->next;
    }
};
struct compare
{
  bool
  operator() (const ListNode& left, const ListNode& right) const
  {
    return left.val > right.val;
  }
};

void
example_usage(const ListNode& left, const ListNode& right, const compare cmp)
{
  if (cmp(left, right))
    std::cout << "left is greater" << std::endl;
  else
    std::cout << "right is greater" << std::endl;
}
auto cmp = [](const ListNode& left, const ListNode& right)->bool{
    return left.val > right.val;
};