一、相關定義
優先佇列容器與佇列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並非按照先進先出的原則進行,而是將當前佇列中最大的元素出隊。這點類似於給佇列裡的元素進行了由大到小的順序排序。元素的比較規則預設按元素值由大到小排序,可以過載「<」操作符來重新定義比較規則。
優先順序佇列可以用向量(vector)或雙向佇列(deque)來實現(注意list container不能用來實現queue,因為list的迭代器不是任意訪問iterator,而pop中用到堆排序時是要求randomaccess iterator 的!):
priority_queue, less> pq1; // 使用遞增less函式物件排序
priority_queue, greater> pq2; // 使用遞減greater函式物件排序
其成員函式有「判空(empty)」 、「尺寸(size)」 、「棧頂元素(top)」 、「壓棧(push)」 、「彈棧(pop)」等。
priority_queue,cmp>pq定義排序
struct cmp
};
struct
cmp2
};
//定義結構,使用運算子過載,自定義優先順序2
struct
number1
};
struct
number2
};
int
a=;
number1 num1=;
number2 num2=;
int
main()
for
(i=0;num1[i].x;i++)
que5.push(num1[i]);
for
(i=0;num2[i].x;i++)
que6.push(num2[i]);
printf
(
"採用預設優先關係:\n(priority_queueque;)\n"
);
printf
(
"queue 0:\n"
);
while
(!que.empty())
puts
(
""
);
puts
(
""
);
printf
(
"採用結構體自定義優先順序方式一:\n(priority_queue,cmp>que;)\n"
);
printf
(
"queue 1:\n"
);
while
(!que1.empty())
puts
(
""
);
printf
(
"queue 2:\n"
);
while
(!que2.empty())
puts
(
""
);
puts
(
""
);
printf
(
"採用標頭檔案\"functional\"內定義優先順序:\n(priority_queue,greater/less>que;)\n"
);
printf
(
"queue 3:\n"
);
while
(!que3.empty())
puts
(
""
);
printf
(
"queue 4:\n"
);
while
(!que4.empty())
puts
(
""
);
puts
(
""
);
printf
(
"採用結構體自定義優先順序方式二:\n(priority_queueque)\n"
);
printf
(
"queue 5:\n"
);
while
(!que5.empty())
puts
(
""
);
printf
(
"queue 6:\n"
);
while
(!que6.empty())
puts
(
""
);
return
0;
}
/*
執行結果 :
採用預設優先關係:
(priority_queueque;)
queue 0:
83 72 56 47 36 22 14 10 7 3
採用結構體自定義優先順序方式一:
(priority_queue,cmp>que;)
queue 1:
7 10 14 22 36 47 56 72 83 91
queue 2:
83 72 56 47 36 22 14 10 7 3
採用標頭檔案"functional"內定義優先順序:
(priority_queue,greater/less>que;)
queue 3:
7 10 14 22 36 47 56 72 83 91
queue 4:
83 72 56 47 36 22 14 10 7 3
採用結構體自定義優先順序方式二:
(priority_queueque)
queue 5:
7 10 14 22 36 47 56 72 83 91
queue 6:
83 72 56 47 36 22 14 10 7 3
*/
C STL優先佇列常用用法
優先佇列 priority queue 普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 largest in,first out 的行為特徵。stl中的優先佇列 priori...
C STL優先佇列常用用法
q.empty 如果隊列為空,則返回true,否則返回false q.size 返回佇列中元素的個數 q.pop 刪除隊首元素,但不返回其值 q.top 返回具有最高優先順序的元素值,但不刪除該元素 q.push item 在基於優先順序的適當位置插入新元素 template class t cla...
C STL優先佇列
q.empty 如果隊列為空,則返回true,否則返回false q.size 返回佇列中元素的個數 q.pop 刪除隊首元素,但不返回其值 q.top 返回具有最高優先順序的元素值,但不刪除該元素 q.push item 在基於優先順序的適當位置插入新元素template class t clas...