Sve*_*end 3 c++ templates graph
可能是一个非常新的C++问题.假设我有一个类,顶点,有几个属性和方法.我想把一堆顶点填充到一个队列中,并让它们按顶点类的特殊属性排序(为学校做一个基本的Dijkstra图算法).
但是,我遇到了一些渗透C++语法的问题.这是我的代码(顶点未显示,但它非常简单).
typedef std::priority_queue<benchmark::vertex*,
std::vector<benchmark::vertex*>,
std::less<benchmark::vertex*> > q_type;
q_type* q = new q_type();
benchmark::vertex* v1 = new benchmark::vertex(0.1,0.1);
v1->cost = 4;
benchmark::vertex* v2 = new benchmark::vertex(0.1,0.1);
v2->cost = 8;
benchmark::vertex* v3 = new benchmark::vertex(0.1,0.1);
v3->cost = 6;
benchmark::vertex* v4 = new benchmark::vertex(0.1,0.1);
v4->cost = 10;
benchmark::vertex* v5 = new benchmark::vertex(0.1,0.1);
v5->cost = 2;
q->push(v1);
q->push(v2);
q->push(v3);
q->push(v4);
q->push(v5);
while (!q->empty()) {
std::cout << (*(q->top())).cost << std::endl;
q->pop();
}
Run Code Online (Sandbox Code Playgroud)
这在我的本地机器上输出2,10,6,8,4.我正在使用GCC(gcc版本4.3.3(Ubuntu 4.3.3-5ubuntu4))的Linux机器上测试它.显然,我希望它按顺序吐出数字.
我如何制作比较器,以便在进行比较时查看并比较vertex.cost?
替换std::less<benchmark::vertex*>为将两个顶点指针作为参数的任何函数或函子,并返回trueiff第一个参数属于第二个参数.
std::less<benchmark::vertex*> 将要比较两个指针,所以你看到的结果显示了它们在内存中的顺序.
std::less<benchmark::vertex*> 比较地址而不是顶点
// Functor
struct VertexLess
{
bool operator (const benchmark::vertex* left, const benchmark::vertex* right) const {
return left->id < right->id;
}
};
typedef std::priority_queue<benchmark::vertex*,
std::vector<benchmark::vertex*>,
VertexLess > q_type;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |