一个结构的堆

时间:2013-12-27 00:05:35

标签: c++ algorithm stl queue heapsort

我正在尝试在C ++中实现heapsort,它将采用两个整数的结构并按字典顺序对它们进行排序。但是,Visual Studio向我抛出了一堆错误,比如

Error   8   error C2784: 'bool std::operator <(const std::_Revranit<_RanIt,_Base> &,const std::_Revranit<_RanIt2,_Base2> &)' : could not deduce template argument for 'const std::_Revranit<_RanIt,_Base> &' from 'const lol'

我真的不知道这意味着什么,但我认为在宣言中有些不对劲。我这样做了:

struct lol {
    int num1;
    int num2;
};

我宣布了这样的priority_queue:

priority_queue<lol> q;

1 个答案:

答案 0 :(得分:0)

类型lol需要operator<函数,以便priority_queue知道如何对它们进行排序。默认情况下,编译器不提供一个。有几种选择。

要在不更改priority_queue<lol> q;声明的情况下编译代码,您需要提供运算符。您可以将其声明为自由函数。这是一个例子;假设您要根据lol字段对num1结构进行排序(不确定实际上 希望如何执行此操作)。

bool operator< (const lol &left, const lol &right) {
    return left.num1 < right.num1;
}

注意,如果num1是私有的,则您需要让运营商成为lol的朋友。