我使用STL priority_queue来收集我自己的类Lettura的对象。C++优先级队列不尊重FIFO订单
//---------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<Lettura, std::vector<Lettura>, std::less<Lettura> > 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: "<<coda.top()<<"\n"; coda.pop();
cout<<"top: "<<coda.top()<<"\n"; coda.pop();
cout<<"top: "<<coda.top()<<"\n"; coda.pop();
cout<<"top: "<<coda.top()<<"\n"; coda.pop();
cout<<"top: "<<coda.top()<<"\n"; coda.pop();
cout<<"top: "<<coda.top()<<"\n"; coda.pop();
}
我实施了这些比较方法:
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_queue<Lettura> coda;
std::priority_queue<Lettura, std::vector<Lettura>, std::less_equal<Lettura> > coda;
有人可以帮助我吗?
您正在示出的值11,12,13,14,15但是推动值50,50,100等等。你使用什么值? –
那些不是11,12 ...但是l1,l2,l3 ...'L'不是'1' –