priority_queue的宣告,可以看到底層預設是用vector實現的,並且第三個引數比較器預設是lesstemplate ,
class compare = less> class priority_queue;
less的定義:
priority_queue的建構函式有這樣兩種,所以除了上面兩種方法,我們還能用函式指標或者lambda的方式來實現定義自己的排序方法,但是要注意< > 這裡的第三個引數依然要是類,而不能是乙個物件,所以要麼使用decltype (假如是函式指標的話,一定要 decltype(fun)*,最後的 * 別忘了加) 或者顯式的用 function《返回型別 ( 引數 ) >templatestruct less:public binary_function
explicit priority_queue(const compare& x) : c(), comp(x) {}
這裡的組合方法就有很多了。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 元素...