gpt4 book ai didi

c++ - 访问类私有(private)成员的自定义优先级队列比较器

转载 作者:行者123 更新时间:2023-11-30 03:44:11 25 4
gpt4 key购买 nike

如果你看下面的代码,我正在尝试创建一个 priority_queue,我将它命名为 DijkstraPriorityQueue,它有一个自定义比较器,它也使用私有(private) vector 距离

你可以看到我有一些点 ....... 因为我尝试的一切都失败了。

在这种特定情况下,使这项工作按预期进行的最干净的解决方案(或可能的解决方案)是什么?

Dijkstra.h

class Dijkstra
{
public:
Dijkstra(Graph G, int s); // Create
~Dijkstra(); // Destroy

private:
bool compare(int u, int v)
{
return distTo[u] < distTo[v];
}
typedef priority_queue<int, vector<int>, .........> DijkstraPriorityQueue;


vector<float> distTo; // distTo[u] is the distance of the shortest s->u path
DijkstraPriorityQueue PQ; // Min-Priority Queue, implemented for Dijkstra
};

Dijkstra.cpp

Dijkstra::Dijkstra(Graph G, int s)
{
PQ = DijkstraPriorityQueue(...........);
}

最佳答案

选项#1

#include <functional>
#include <queue>
#include <vector>

class Dijkstra
{
public:
Dijkstra()
: PQ([this](int u, int v){ return distTo[u] < distTo[v]; })
{
}

private:
using DijkstraPriorityQueue
= std::priority_queue<int, std::vector<int>, std::function<bool(int,int)>>;

std::vector<float> distTo;

DijkstraPriorityQueue PQ;
};

选项#2

#include <functional>
#include <queue>
#include <vector>

class Dijkstra
{
public:
Dijkstra()
: PQ(std::bind(&Dijkstra::compare, this, std::placeholders::_1, std::placeholders::_2))
// or
// : PQ([this](int u, int v){ return compare(u, v); })
{
}

private:
bool compare(int u, int v) const
{
return distTo[u] < distTo[v];
}

using DijkstraPriorityQueue
= std::priority_queue<int, std::vector<int>, std::function<bool(int,int)>>;

std::vector<float> distTo;

DijkstraPriorityQueue PQ;
};

选项 #3

(郑重声明,如果您坚持使用 C++03):

#include <queue>
#include <vector>

class Dijkstra
{
public:
Dijkstra()
: PQ(compare(this))
{
}

private:
struct compare
{
explicit compare(Dijkstra* d) : d(d) {}

bool operator()(int u, int v) const
{
return d->distTo[u] < d->distTo[v];
}

const Dijkstra* d;
};

typedef std::priority_queue<int, std::vector<int>, compare> DijkstraPriorityQueue;

std::vector<float> distTo;

DijkstraPriorityQueue PQ;
};

关于c++ - 访问类私有(private)成员的自定义优先级队列比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667687/

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