访问类的私有成员的自定义优先级队列比较器
Custom priority queue comparator that accesses private members of a class
如果你看下面的代码,我正在尝试创建一个priority_queue
,我把它命名为DijkstraPriorityQueue
,它有一个自定义比较器,它也使用私有向量distTo
。
你可以看到我有一些点.......
因为我尝试的所有东西都失败了。
这种特定情况下,使这项工作按预期工作的最干净的解决方案(或可能的解决方案)是什么?
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
};
迪克斯特拉.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++优先级队列,按对象的唯一指针的特定方法升序排列
- 按对象的特定方法按升序排列的C++优先级队列
- 使用2个键的cpp-stl::优先级队列排序不正确
- 为什么我需要C++中不同的排序格式来对这个USACO代码上的数组和优先级队列进行排序
- 打印优先级队列
- 带自定义比较器的最小优先级队列
- 优先级队列自定义比较器
- 排序数组优先级队列
- 更改运行时优先级队列的排序功能
- 优先级队列构造函数的工作
- 实现优先级队列
- 优先级队列功能比较
- 在C++中打印对的优先级队列的所有值时出现问题
- 使用堆的优先级队列,具有相同键的值不遵循 FIFO(先进先出)
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 是否可以使用简单队列创建优先级队列
- 如何在 c++ 中创建对的优先级队列.这会弹出具有最小值的元素.默认的弹出最大值
- Cython中带有自定义比较器的优先级队列
- 优先级队列比较器[C++].
- asio::io_service 具有多个线程的优先级队列处理