gpt4 book ai didi

c++ - priority_queue 类字段使用访问另一个类字段的比较器

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:13 26 4
gpt4 key购买 nike

你好,我需要创建一个类,其中包含一个 priority_queue 字段,其比较函数需要访问类中的另一个字段。简而言之,我需要写这样的东西:

class A
{
B foo;
priority_queue<C,vector<C>,comparator> bar;
}

比较器的定义类似于

bool comparator(const C& c1, const C& c2)
{
//compute the boolean value using c1, c2 and the field foo
}

是否有可能以某种方式获得此结果以及我必须在哪里定义比较器函数?

最佳答案

有两个步骤可以做到这一点。

首先,您的比较器需要一个构造函数来保存对 A

实例的引用
class comparator {

A &a;

public:
comparator(A &a_arg) : a(a_arg)
{
}

bool operator()(const C &first, const C &second) const
{
// The comparator can use "a" to access the contents of the
// A class.
}
};

第二步是 A 的构造函数使用从 构造的显式 比较器 初始化其 priority_queue 成员*这个:

A::A() : bar(comparator(*this))
{
// ...
}

注意:请记住比较器中对 *this 的引用。如果 A 的实例被复制,则 this 引用在拷贝中将无效。您的 A 类应该有一个 deleted 复制构造函数,或者一个初始化复制构造的 A 的显式复制构造函数priority_queue,因此。

关于c++ - priority_queue 类字段使用访问另一个类字段的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37723103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com