Я хочу создать приоритетную очередь в C ++
Я создал структуру в качестве общего плана для создания экземпляра очереди приоритетов
template<typename T, typename priority_t>
struct PriorityQueue {
typedef std::pair<priority_t, T> PQElement;
std::priority_queue<PQElement, std::vector<PQElement>,
std::greater<PQElement>> elements;
inline bool empty() const {
return elements.empty();
}
inline void put(T item, priority_t priority) {
elements.emplace(priority, item);
}
T get() {
T best_item = elements.top().second;
elements.pop();
return best_item;
}
};
Мой класс координат
/*
* Structure for a coordinate
*/
class Coord{
public:
int x, y;
public:
Coord(int x1, int y1) {
x = x1;
y = y1;
}
int getX(void) {
return x;
}
int getY(void) {
return y;
}
};
Я пытался положить в него предметы.Оператор put вызывает ошибку во время компиляции.
Coord start = Coord(0,0);
PriorityQueue<Coord, double> frontier;
frontier.put(start, 0);
Я получаю сообщение об ошибке:
invalid operands to binary expression ('const Coord' and 'const Coord')
Полный текст сообщения об ошибке
error: invalid operands to binary
expression ('const Key' and 'const Key')
return __x.first < __y.first || (!(__y.first < __x.first) && __x.second < __y.second);
~~~~~~~~~~ ^ ~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:582:16: note: in instantiation of function
template specialization 'std::__1::operator<<double, Key>' requested here
return __y < __x;
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/functional:724:21: note: in instantiation of function
template specialization 'std::__1::operator><double, Key>' requested here
{return __x > __y;}
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:4973:13: note: in instantiation of member
function 'std::__1::greater<std::__1::pair<double, Key> >::operator()' requested here
if (__comp(*__ptr, *--__last))
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/algorithm:5001:5: note: in instantiation of function
template specialization
'std::__1::__sift_up<std::__1::greater<std::__1::pair<double, Key> > &, std::__1::__wrap_iter<std::__1::pair<double, Key> *> >' requested here
__sift_up<_Comp_ref>(__first, __last, __comp, __last - __first);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/queue:690:12: note: in instantiation of function template
specialization 'std::__1::push_heap<std::__1::__wrap_iter<std::__1::pair<double, Key> *>, std::__1::greater<std::__1::pair<double, Key> > >' requested
here
_VSTD::push_heap(c.begin(), c.end(), comp);
^
lab1.cpp:87:14: note: in instantiation of function template specialization 'std::__1::priority_queue<std::__1::pair<double, Key>,
std::__1::vector<std::__1::pair<double, Key>, std::__1::allocator<std::__1::pair<double, Key> > >, std::__1::greater<std::__1::pair<double, Key> >
>::emplace<double &, Key &>' requested here
elements.emplace(priority, item);
^
lab1.cpp:305:14: note: in instantiation of member function 'PriorityQueue<Key, double>::put' requested here
frontier.put(start, 0);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/utility:572:1: note: candidate template ignored: could not
match 'pair<type-parameter-0-0, type-parameter-0-1>' against 'const Key'
operator< (const pair<_T1,_T2>& __x, const pair<_T1,_T2>& __y)
Что означает эта ошибка?Где я могу начать отлаживать эту ошибку?