std::priority_queue::priority_queue
科技促进发展:优先事项[医]队列::优先级[医]排队
| (1) | |
---|---|---|
explicit priority_queue( const Compare& compare = Compare(), const Container& cont = Container() | (until C++11) | |
priority_queue( const Compare& compare, const Container& cont | (since C++11) | |
explicit priority_queue( const Compare& compare = Compare(), Container&& cont = Container() | (2) | (since C++11) |
priority_queue( const priority_queue& other | (3) | |
priority_queue( priority_queue&& other | (4) | (since C++11) |
template< class Alloc > explicit priority_queue( const Alloc& alloc | (5) | (since C++11) |
template< class Alloc > priority_queue( const Compare& compare, const Alloc& alloc | (6) | (since C++11) |
template< class Alloc > priority_queue( const Compare& compare, const Container& cont, const Alloc& alloc | (7) | (since C++11) |
template< class Alloc > priority_queue( const Compare& compare, Container&& cont, const Alloc& alloc | (8) | (since C++11) |
template< class Alloc > priority_queue( const priority_queue& other, const Alloc& alloc | (9) | (since C++11) |
template< class Alloc > priority_queue( priority_queue&& other, const Alloc& alloc | (10) | (since C++11) |
template< class InputIt > priority_queue( InputIt first, InputIt last, const Compare& compare, const Container& cont | (11) | (since C++11) |
template< class InputIt > priority_queue( InputIt first, InputIt last, const Compare& compare = Compare(), Container&& cont = Container() | (12) | (since C++11) |
从各种数据源构造容器适配器的新底层容器。
1%29复制构造底层容器。c
带着...的内容cont
.复制-构造比较函子comp
带着...的内容compare
.电话std::make_heap
(c.begin(), c.end(), comp)
这也是默认构造函数。%28直到C++11%29
2%29移动-构造底层容器c
带着std::move(cont)
.复制-构造比较函子comp
带着...的内容compare
.电话std::make_heap
(c.begin(), c.end(), comp)
这也是默认构造函数。%28自C++11%29
3%29复制构造函数。的内容复制构造适配器。other.c
.比较函子是用std::move(other.comp)
.%28隐式声明%29
4%29移动构造函数。适配器是用std::move(other.c)
.比较函子是用std::move(other.comp)
.%28隐式声明%29
5-10%29以下构造函数仅在std::uses_allocator<container_type, Alloc>::value==true,也就是说,如果底层容器是所有标准库容器%29的分配器感知容器%28true。
5%29使用alloc
作为分配器。有效呼叫c(alloc)
...comp
是值初始化的。
6%29使用alloc
作为分配器。有效呼叫c(alloc)
.复制构造comp
从compare
...
7%29构造底层容器,其内容为cont
和使用alloc
作为分配器,就像c(cont, alloc)
.复制构造comp
从compare
.然后打电话std::make_heap
(c.begin(), c.end(), comp)
...
8%29构造底层容器,其内容为cont
使用移动语义alloc
作为分配器,就像c(std::move(cont), alloc)
.复制构造comp
从compare
.然后打电话std::make_heap
(c.begin(), c.end(), comp)
...
9%29构造适配器,其内容为other.c
和使用alloc
作为分配器。有效呼叫c(other.c, alloc)
.复制构造comp
从other.comp
...
10%29构造适配器,其内容为other
在使用时使用移动语义alloc
作为分配器。有效呼叫c(std::move(other.c), alloc)
.移动-构造comp
从other.comp
...
11%29拷贝构造c
从cont
和comp
从compare
.然后打电话c.insert(c.end(), first, last,然
后打电话std::make_heap(c
.begin(), c.end(), comp...
12%29移动-构造c
从std::move(cont)
和comp
从std::move(compare)
.然后打电话c.insert(c.end(), first, last,然
后打电话std::make_heap(c
.begin(), c.end(), comp...
参数
alloc | - | allocator to use for all memory allocations of the underlying container |
---|---|---|
other | - | another container adaptor to be used as source to initialize the underlying container |
cont | - | container to be used as source to initialize the underlying container |
compare | - | the comparison function object to initialize the underlying comparison functor |
first, last | - | range of elements to initialize with |
类型要求
-分配器必须符合分配器的要求。
-货柜必须符合货柜的规定。构造函数%285-10%29只在容器满足分配程序-仓库容器的要求时才定义。
-输入必须符合输入器的要求。
复杂性
1,3%29 O%28N%29比较,其中N为cont.size()
...
此外,O%28N%29调用value_type
,其中N是cont.size()
...
2%29O%28N%29比较,其中N为cont.size()
...
4-6%29常数。
7%29O%28N%29比较,其中N为cont.size()
...
此外,O%28N%29调用value_type
,其中N是cont.size()
...
8%29O%28N%29比较,其中N为cont.size()
...
9%29线性other
...
10%29常数。
11%29O%28N%29比较,其中N为cont.size()
+
std::distance
(first, last)
...
此外,O%28N%29调用value_type
,其中N是cont.size()
...
12%29O%28N%29比较,其中N为cont.size()
+
std::distance
(first, last)
...
例
二次
#include <queue>
#include <vector>
#include <iostream>
#include <functional>
int main()
{
std::priority_queue<int> c1;
c1.push(5
std::cout << c1.size() << '\n';
std::priority_queue<int> c2(c1
std::cout << c2.size() << '\n';
std::vector<int> vec={3, 1, 4, 1, 5};
std::priority_queue<int> c3(std::less<int>(), vec
std::cout << c3.size() << '\n';
}
二次
产出:
二次
1
1
5
二次
使用自定义比较器的示例
二次
#include <iostream>
#include <queue>
#include <vector>
#include <utility>
using my_pair_t = std::pair<size_t,bool>;
using my_container_t = std::vector<my_pair_t>;
int main()
{
auto my_comp =
[](const my_pair_t& e1, const my_pair_t& e2)
{ return e1.first > e2.first; };
std::priority_queue<my_pair_t,
my_container_t,
decltype(my_comp)> queue(my_comp
queue.push(std::make_pair(5, true)
queue.push(std::make_pair(3, false)
queue.push(std::make_pair(7, true)
std::cout << std::boolalpha;
while(!queue.empty())
{
const auto& p = queue.top(
std::cout << p.first << " " << p.second << "\n";
queue.pop(
}
}
二次
产出:
二次
3 false
5 true
7 true
二次
另见
operator= | assigns values to the container adaptor (public member function) |
---|
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。