我正在使用STL priority_queue来收集我自己的类Lettura的对象.
//---------LETTURA---------- enum Priority {zero, standard, urgent}; class Lettura{ public: int valore; char sensore; Priority priorita; Lettura(): valore(0),sensore('\0'),priorita(zero){} Lettura(const int val, const char s='\0', const Priority p=zero): valore(val),sensore(s), priorita(p){} friend ostream& operator<<(ostream& out, const Lettura & lett); };
我希望它们按照渐进式"priorita"的顺序弹出,但我也希望在普通队列中使用FIFO策略弹出相同优先级的元素.我以随机顺序获得相同优先级的元素:
top: l5 urgent top: l1 standard top: l4 standard top: l6 standard top: l2 standard top: l3 standard
我希望FIFO顺序中具有相同优先级的元素:
top: l5 urgent top: l1 standard top: l2 standard top: l3 standard top: l4 standard top: l6 standard
这是我的代码:
int main() { std::priority_queue, std::less > coda; Lettura l1(50,'a',standard); Lettura l2(50,'b',standard); Lettura l3(120,'c',standard); Lettura l4(100,'d',standard); Lettura l5(30,'e',urgent); Lettura l6(35,'f',standard); coda.push(l1); coda.push(l2); coda.push(l3); coda.push(l4); coda.push(l5); coda.push(l6); cout<<"top: "< 我已经实现了这些比较方法:
bool operator<(const Lettura& l1, const Lettura& l2){ return l1.priorita < l2.priorita; } bool operator<=(const Lettura& l1, const Lettura& l2){ return l1.priorita <= l2.priorita; }我也尝试过不同的队列构造函数,但没有成功:
std::priority_queuecoda; std::priority_queue , std::less_equal > coda; 有人能帮助我吗?
1> 小智..:您的代码似乎正常工作,因为您首先获得紧急项目.在基于堆的优先级队列中,插入时间没有子排序,因此您将以未定义的顺序获取具有相同优先级的项目,除了它们将位于具有更高优先级的项目之后.您需要添加一个额外的字段,例如放入队列的时间,并在比较运算符中将其与Priority枚举一起使用.