Я использую 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' not '1' –