在A star算法中就出现了权重问题,是数据结构中涉及到权重或者说是优先级的就是优先队列了,为此分析一下,这类问题的共性。
在STL中queue头文件中,有priority_queue的类
这是优先队列,在涉及权重问题时可以使用
一般的C++这个类使用时,
1、
priority_queue pq;
这时,库默认是将数值最大的作为优先级最高的输出
2、
priority_queue<int, vector<int>, greater<int> >pq;
这是数值越小优先级越高。
3、就是自定义优先级
这里需要了解重载操作符
保留字type operator 重载符 (形参表)
所在在自己创建的类里面加上重载函数
基本模型为
typedef struct p
{
string name;
int priority;
bool operator < (const p a) const
//模型语句
{
return priority<a.priority;
//priority 越大优先级越高
}
}P;
测试代码
为
#include <queue>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
typedef struct p
{
string name;
int priority;
bool operator < (const p a) const
{
return priority<a.priority;
}
}P;
int main()
{
priority_queue <P> g;
P i;
i.name="gff";
i.priority=3;
g.push(i);
i.name="fl";
i.priority=5;
g.push(i);
i.name="nust";
i.priority=1;
g.push(i);
while(!g.empty())
{
cout<<g.top().name<<" "<<g.top().priority<<endl;
g.pop();
}
}
输出为
还有一个问题,对于自定义的权重类型,如果是相同权重,priority_queue是如何选择的
将每个入队列的对象的优先级都变为相同,
好像输出没有什么规律,
暂时认为是随机的,
有待补充