标准库标头 <queue>
来自cppreference.com
此头文件是容器库的一部分。
包含 | ||
(C++20) | 三路比较运算符支持 | |
(C++11) | std::initializer_list 类模板 | |
类 | ||
适配一个容器以提供队列(FIFO 数据结构) (类模板) | ||
适配一个容器以提供优先级队列 (类模板) | ||
特化 std::uses_allocator 类型特征 (类模板特化) | ||
特化 std::uses_allocator 类型特征 (类模板特化) | ||
函数 | ||
按照字典顺序比较两个 queue 的值 (函数模板) | ||
(C++11) | 特化 std::swap 算法 (函数模板) | |
特化 std::swap 算法 (函数模板) |
[编辑]概要
#include <compare>#include <initializer_list> namespace std {// 类模板 queuetemplate<class T, class Container = deque<T>>class queue; template<class T, class Container>bool operator==(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, class Container>bool operator!=(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, class Container>bool operator<(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, class Container>bool operator>(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, class Container>bool operator<=(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, class Container>bool operator>=(const queue<T, Container>& x, const queue<T, Container>& y);template<class T, three_way_comparable Container> compare_three_way_result_t<Container> operator<=>(const queue<T, Container>& x, const queue<T, Container>& y); template<class T, class Container>void swap(queue<T, Container>& x, queue<T, Container>& y)noexcept(noexcept(x.swap(y)));template<class T, class Container, class Alloc>struct uses_allocator<queue<T, Container>, Alloc>; // formatter 对 queue 的特化template<class CharT, class T, formattable<CharT> Container>struct formatter<queue<T, Container>, CharT>; // 类模板 priority_queuetemplate<class T, class Container = vector<T>, class Compare = less<typename Container::value_type>>class priority_queue; template<class T, class Container, class Compare>void swap(priority_queue<T, Container, Compare>& x, priority_queue<T, Container, Compare>& y)noexcept(noexcept(x.swap(y)));template<class T, class Container, class Compare, class Alloc>struct uses_allocator<priority_queue<T, Container, Compare>, Alloc>; // formatter 对 priority_queue 的特化template<class CharT, class T, formattable<CharT> Container, class Compare>struct formatter<priority_queue<T, Container, Compare>, CharT>;}
[编辑]类模板 std::queue
namespace std {template<class T, class Container = deque<T>>class queue {public:using value_type =typename Container::value_type;using reference =typename Container::reference;using const_reference =typename Container::const_reference;using size_type =typename Container::size_type;using container_type = Container; protected: Container c; public: queue(): queue(Container()){}explicit queue(const Container&);explicit queue(Container&&);template<class InputIter> queue(InputIter first, InputIter last);template<container-compatible-range<T> R> queue(from_range_t, R&& rg);template<class Alloc>explicit queue(const Alloc&);template<class Alloc> queue(const Container&, const Alloc&);template<class Alloc> queue(Container&&, const Alloc&);template<class Alloc> queue(const queue&, const Alloc&);template<class Alloc> queue(queue&&, const Alloc&);template<class InputIter, class Alloc> queue(InputIter first, InputIter last, const Alloc&);template<container-compatible-range<T> R, class Alloc> queue(from_range_t, R&& rg, const Alloc&); bool empty()const{return c.empty();} size_type size()const{return c.size();} reference front(){return c.front();} const_reference front()const{return c.front();} reference back(){return c.back();} const_reference back()const{return c.back();}void push(const value_type& x){ c.push_back(x);}void push(value_type&& x){ c.push_back(std::move(x));}template<container-compatible-range<T> R>void push_range(R&& rg);template<class... Args> decltype(auto) emplace(Args&&... args){return c.emplace_back(std::forward<Args>(args)...);}void pop(){ c.pop_front();}void swap(queue& q)noexcept(is_nothrow_swappable_v<Container>){usingstd::swap; swap(c, q.c);}}; template<class Container> queue(Container)-> queue<typename Container::value_type, Container>; template<class InputIter> queue(InputIter, InputIter)-> queue</*iter-value-type*/<InputIter>>; template<ranges::input_range R> queue(from_range_t, R&&)-> queue<ranges::range_value_t<R>>; template<class Container, class Allocator> queue(Container, Allocator)-> queue<typename Container::value_type, Container>; template<class InputIter, class Allocator> queue(InputIter, InputIter, Allocator)-> queue</*iter-value-type*/<InputIter>, deque</*iter-value-type*/<InputIter>, Allocator>>; template<ranges::input_range R, class Allocator> queue(from_range_t, R&&, Allocator)-> queue<ranges::range_value_t<R>, deque<ranges::range_value_t<R>, Allocator>>; template<class T, class Container, class Alloc>struct uses_allocator<queue<T, Container>, Alloc>: uses_allocator<Container, Alloc>::type{};}
[编辑]类模板 std::priority_queue
namespace std {template<class T, class Container = vector<T>, class Compare = less<typename Container::value_type>>class priority_queue {public:using value_type =typename Container::value_type;using reference =typename Container::reference;using const_reference =typename Container::const_reference;using size_type =typename Container::size_type;using container_type = Container;using value_compare = Compare; protected: Container c; Compare comp; public: priority_queue(): priority_queue(Compare()){}explicit priority_queue(const Compare& x): priority_queue(x, Container()){} priority_queue(const Compare& x, const Container&); priority_queue(const Compare& x, Container&&);template<class InputIter> priority_queue(InputIter first, InputIter last, const Compare& x = Compare());template<class InputIter> priority_queue(InputIter first, InputIter last, const Compare& x, const Container&);template<class InputIter> priority_queue(InputIter first, InputIter last, const Compare& x, Container&&);template<container-compatible-range<T> R> priority_queue(from_range_t, R&& rg, const Compare& x = Compare());template<class Alloc>explicit priority_queue(const Alloc&);template<class Alloc> priority_queue(const Compare&, const Alloc&);template<class Alloc> priority_queue(const Compare&, const Container&, const Alloc&);template<class Alloc> priority_queue(const Compare&, Container&&, const Alloc&);template<class Alloc> priority_queue(const priority_queue&, const Alloc&);template<class Alloc> priority_queue(priority_queue&&, const Alloc&);template<class InputIter, class Alloc> priority_queue(InputIter, InputIter, const Alloc&);template<class InputIter, class Alloc> priority_queue(InputIter, InputIter, const Compare&, const Alloc&);template<class InputIter, class Alloc> priority_queue(InputIter, InputIter, const Compare&, const Container&, const Alloc&);template<class InputIter, class Alloc> priority_queue(InputIter, InputIter, const Compare&, Container&&, const Alloc&);template<container-compatible-range<T> R, class Alloc> priority_queue(from_range_t, R&& rg, const Compare&, const Alloc&);template<container-compatible-range<T> R, class Alloc> priority_queue(from_range_t, R&& rg, const Alloc&); bool empty()const{return c.empty();} size_type size()const{return c.size();} const_reference top()const{return c.front();}void push(const value_type& x);void push(value_type&& x);template<container-compatible-range<T> R>void push_range(R&& rg);template<class... Args>void emplace(Args&&... args);void pop();void swap(priority_queue& q)noexcept( is_nothrow_swappable_v<Container>&& is_nothrow_swappable_v<Compare>){usingstd::swap; swap(c, q.c); swap(comp, q.comp);}}; template<class Compare, class Container> priority_queue(Compare, Container)-> priority_queue<typename Container::value_type, Container, Compare>; template<class InputIter, class Compare = less</*iter-value-type*/<InputIter>>, class Container = vector</*iter-value-type*/<InputIter>>> priority_queue(InputIter, InputIter, Compare = Compare(), Container = Container())-> priority_queue</*iter-value-type*/<InputIter>, Container, Compare>; template<ranges::input_range R, class Compare = less<ranges::range_value_t<R>>> priority_queue(from_range_t, R&&, Compare = Compare())-> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>>, Compare>; template<class Compare, class Container, class Allocator> priority_queue(Compare, Container, Allocator)-> priority_queue<typename Container::value_type, Container, Compare>; template<class InputIter, class Allocator> priority_queue(InputIter, InputIter, Allocator)-> priority_queue</*iter-value-type*/<InputIter>, vector</*iter-value-type*/<InputIter>, Allocator>, less</*iter-value-type*/<InputIter>>>; template<class InputIter, class Compare, class Allocator> priority_queue(InputIter, InputIter, Compare, Allocator)-> priority_queue</*iter-value-type*/<InputIter>, vector</*iter-value-type*/<InputIter>, Allocator>, Compare>; template<class InputIter, class Compare, class Container, class Allocator> priority_queue(InputIter, InputIter, Compare, Container, Allocator)-> priority_queue<typename Container::value_type, Container, Compare>; template<ranges::input_range R, class Compare, class Allocator> priority_queue(from_range_t, R&&, Compare, Allocator)-> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>, Allocator>, Compare>; template<ranges::input_range R, class Allocator> priority_queue(from_range_t, R&&, Allocator)-> priority_queue<ranges::range_value_t<R>, vector<ranges::range_value_t<R>, Allocator>>; // 不提供相等 template<class T, class Container, class Compare, class Alloc>struct uses_allocator<priority_queue<T, Container, Compare>, Alloc>: uses_allocator<Container, Alloc>::type{};}