Я изучаю, как использовать STL в C++. Я пытаюсь реализовать кучу, используя std::priority_queue
. Вот моя попытка:приоритетная очередь в C++ с пользовательским классом и выражением лямбда
#include<vector>
#include<algorithm>
#include<iostream>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
struct data {
int first;
int second;
};
class compare {
public:
bool operator()(data &a ,data &b)
{
if(a.first < b.first) return true;
else false;
}
};
int main()
{
priority_queue <data , vector<data>, compare> heap;
data temp2[] = { {5,19},{2,7},{90,9},{12,6} };
for(int i = 0; i < 4; ++i)
{
heap.push(temp2[i]);
}
while(heap.empty() == false)
{
cout << heap.top().first << endl;;
heap.pop();
}
}
Когда я запускаю этот код на визуально студии 2012 года он выходит из строя, нажимая на второй элемент. Ошибка ниже:
Program: C:\WINDOWS\system32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\algorithm
Line: 2463
Expression: invalid operator<
, но когда я запускаю тот же код в ideone, он работает, но результат неправильный. Ideone link
1. Может кто-нибудь указать, куда я иду не так?
добавив еще один вопрос в этом же вопрос:
2. Как написать лямбда-выражение этого, а с помощью функции сравнения?
спасибо, что указали это. .. Это была такая глупая ошибка. – RATHI
@RATHI Я обновил ответ, чтобы ответить на ваш второй вопрос. Однако имейте в виду, что добавление несвязанного вопроса к вашему оригинальному недоверчиво относится к SO - второй должен был быть отдельным вопросом. – bogdan