priority queue過載小於運算子的問題

2021-09-22 17:49:13 字數 1457 閱讀 6608

template ,

class compare = less> class priority_queue;

priority_queue的宣告,可以看到底層預設是用vector實現的,並且第三個引數比較器預設是less

less的定義:

templatestruct less:public binary_function

explicit priority_queue(const compare& x) : c(), comp(x) {}

priority_queue的建構函式有這樣兩種,所以除了上面兩種方法,我們還能用函式指標或者lambda的方式來實現定義自己的排序方法,但是要注意< > 這裡的第三個引數依然要是類,而不能是乙個物件,所以要麼使用decltype  (假如是函式指標的話,一定要 decltype(fun)*,最後的 * 別忘了加) 或者顯式的用 function《返回型別 ( 引數 )  >

priority_queue, decltype(cmpfunc) *> que1(cmpfunc); // 注意一定要加上 *

priority_queue, function> que1((const student & a, const student & b) );

這裡的組合方法就有很多了。

全部**:

class student 

friend bool operator<(const student& a, const student & b)

student(int _age, string _name) :age(_age), name(_name) {}

};/**可呼叫的函式操作符的物件*/

struct mycmp

};/**函式指標*/

bool cmpfunc(const student& a, const student& b)

int main() ;

priority_queue, decltype(cmp)> que4(cmp);

/*** 需要把lambda表示式作為優先佇列引數進行初始化

* 並且指定priority_queue的模板實參,decltype(cmp),

* 可以認為是確定函式的型別

* bool (const student & a,const student & b)

**///使用lambda表示式方法2

priority_queue, function> que5((const student & a, const student & b) );

//使用函式指標方法2

//函式指標來初始化函式物件

priority_queue, function> que6(cmpfunc);

system("pause");

}

priority queue自定義型別過載

prioroty queue我們可以認為就是乙個堆,我們堆的性質和std裡面的這個容器其實定義性質都是差不多的。在預設情況了,qriority queue堆頂元素是最大的,也就是大堆,但是我們往往知道如果是內建型別我們想換成小堆只需要加上priority就可以了這樣也是比較簡單的,雖然加上這麼乙個堆...

priority queue的過載運算子原理

include using namespace std 記得包含標頭檔案噢 1.priority queue在stl內部定義的原型是 template class t class sequence vector,classcompare less 主要,要乙個空格,否則編譯器會當做右移操作符,報錯 ...

PriorityQueue實現原理

priorityqueue priorityqueue是個基於優先順序堆的極大優先順序佇列 此佇列按照在構造時所指定的順序對元素排序,既可以根據元素的自然順序來指定排序 參閱 comparable 也可以根據 comparator 來指定 這取決於使用哪種構造方法。優先順序佇列不允許 null 元素...