STL--关于权重问题的解决

来源:互联网 发布:魔神英雄传 知乎 编辑:程序博客网 时间:2024/06/05 03:49

在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是如何选择的

将每个入队列的对象的优先级都变为相同,
好像输出没有什么规律,
暂时认为是随机的,
有待补充

0 0