98#ifdef _GLIBCXX_CONCEPT_CHECKS
100 typedef typename _Sequence::value_type _Sequence_value_type;
101# if __cplusplus < 201103L
102 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
104 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept)
105 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
106 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
109 template<
typename _Tp1,
typename _Seq1>
113 template<
typename _Tp1,
typename _Seq1>
117#if __cpp_lib_three_way_comparison
118 template<
typename _Tp1, three_way_comparable _Seq1>
123#if __cplusplus >= 201103L
124 template<
typename _Alloc>
125 using _Uses =
typename
128#if __cplusplus >= 201703L
133 "value_type must be the same as the underlying container");
138 typedef typename _Sequence::value_type value_type;
139 typedef typename _Sequence::reference reference;
140 typedef typename _Sequence::const_reference const_reference;
141 typedef typename _Sequence::size_type size_type;
142 typedef _Sequence container_type;
159#if __cplusplus < 201103L
161 queue(
const _Sequence& __c = _Sequence())
164 template<
typename _Seq = _Sequence,
typename _Requires =
typename
170 queue(
const _Sequence& __c)
174 queue(_Sequence&& __c)
177 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
179 queue(
const _Alloc& __a)
182 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
183 queue(
const _Sequence& __c,
const _Alloc& __a)
186 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
187 queue(_Sequence&& __c,
const _Alloc& __a)
188 :
c(std::
move(__c), __a) { }
190 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
194 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
196 :
c(std::
move(__q.
c), __a) { }
199#ifdef __glibcxx_adaptor_iterator_pair_constructor
200 template<
typename _InputIterator,
201 typename = _RequireInputIter<_InputIterator>>
202 queue(_InputIterator __first, _InputIterator __last)
203 :
c(__first, __last) { }
205 template<
typename _InputIterator,
typename _Alloc,
206 typename = _RequireInputIter<_InputIterator>,
207 typename = _Uses<_Alloc>>
208 queue(_InputIterator __first, _InputIterator __last,
const _Alloc& __a)
209 :
c(__first, __last, __a) { }
215 _GLIBCXX_NODISCARD
bool
217 {
return c.empty(); }
233 __glibcxx_requires_nonempty();
245 __glibcxx_requires_nonempty();
257 __glibcxx_requires_nonempty();
269 __glibcxx_requires_nonempty();
284 {
c.push_back(__x); }
286#if __cplusplus >= 201103L
291#if __cplusplus > 201402L
292 template<
typename... _Args>
294 emplace(_Args&&... __args)
297 template<
typename... _Args>
299 emplace(_Args&&... __args)
318 __glibcxx_requires_nonempty();
322#if __cplusplus >= 201103L
325#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
326 noexcept(__is_nothrow_swappable<_Sequence>::value)
328 noexcept(__is_nothrow_swappable<_Tp>::value)
498#ifdef _GLIBCXX_CONCEPT_CHECKS
500 typedef typename _Sequence::value_type _Sequence_value_type;
501# if __cplusplus < 201103L
502 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
504 __glibcxx_class_requires(_Sequence, _SequenceConcept)
505 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
506 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
507 __glibcxx_class_requires4(_Compare,
bool, _Tp, _Tp,
508 _BinaryFunctionConcept)
511#if __cplusplus >= 201103L
512 template<
typename _Alloc>
513 using _Uses =
typename
516#if __cplusplus >= 201703L
521 "value_type must be the same as the underlying container");
526 typedef typename _Sequence::value_type value_type;
527 typedef typename _Sequence::reference reference;
528 typedef typename _Sequence::const_reference const_reference;
529 typedef typename _Sequence::size_type size_type;
530 typedef _Sequence container_type;
533 typedef _Compare value_compare;
544#if __cplusplus < 201103L
547 const _Sequence& __s = _Sequence())
549 { std::make_heap(c.begin(), c.end(), comp); }
551 template<
typename _Seq = _Sequence,
typename _Requires =
typename
560 { std::make_heap(c.begin(), c.end(), comp); }
563 priority_queue(
const _Compare& __x, _Sequence&& __s = _Sequence())
565 { std::make_heap(c.begin(), c.end(), comp); }
571 noexcept(__and_<is_nothrow_move_constructible<_Sequence>,
572 is_nothrow_move_constructible<_Compare>>::value)
573 : c(std::
move(__q.c)), comp(std::
move(__q.comp))
578 noexcept(__and_<is_nothrow_move_assignable<_Sequence>,
579 is_nothrow_move_assignable<_Compare>>::value)
587 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
592 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
594 : c(__a), comp(__x) { }
598 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
601 : c(__c, __a), comp(__x)
602 { std::make_heap(c.begin(), c.end(), comp); }
604 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
605 priority_queue(
const _Compare& __x, _Sequence&& __c,
const _Alloc& __a)
606 : c(std::
move(__c), __a), comp(__x)
607 { std::make_heap(c.begin(), c.end(), comp); }
609 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
611 : c(__q.c, __a), comp(__q.comp) { }
613 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
615 : c(std::
move(__q.c), __a), comp(std::
move(__q.comp))
633#if __cplusplus < 201103L
634 template<
typename _InputIterator>
636 const _Compare& __x = _Compare(),
637 const _Sequence& __s = _Sequence())
640 __glibcxx_requires_valid_range(__first, __last);
641 c.insert(c.end(), __first, __last);
642 std::make_heap(c.begin(), c.end(), comp);
647 template<
typename _InputIterator,
648 typename = std::_RequireInputIter<_InputIterator>>
650 const _Compare& __x = _Compare())
651 : c(__first, __last), comp(__x)
652 { std::make_heap(c.begin(), c.end(), comp); }
656 template<
typename _InputIterator,
657 typename = std::_RequireInputIter<_InputIterator>>
659 const _Compare& __x,
const _Sequence& __s)
662 __glibcxx_requires_valid_range(__first, __last);
663 c.insert(c.end(), __first, __last);
664 std::make_heap(c.begin(), c.end(), comp);
667 template<
typename _InputIterator,
668 typename = std::_RequireInputIter<_InputIterator>>
670 const _Compare& __x, _Sequence&& __s)
673 __glibcxx_requires_valid_range(__first, __last);
674 c.insert(c.end(), __first, __last);
675 std::make_heap(c.begin(), c.end(), comp);
680 template<
typename _InputIterator,
typename _Alloc,
681 typename = std::_RequireInputIter<_InputIterator>,
682 typename _Requires = _Uses<_Alloc>>
684 const _Alloc& __alloc)
685 : c(__first, __last, __alloc), comp()
686 { std::make_heap(c.begin(), c.end(), comp); }
688 template<
typename _InputIterator,
typename _Alloc,
689 typename = std::_RequireInputIter<_InputIterator>,
690 typename _Requires = _Uses<_Alloc>>
692 const _Compare& __x,
const _Alloc& __alloc)
693 : c(__first, __last, __alloc), comp(__x)
694 { std::make_heap(c.begin(), c.end(), comp); }
696 template<
typename _InputIterator,
typename _Alloc,
697 typename = std::_RequireInputIter<_InputIterator>,
698 typename _Requires = _Uses<_Alloc>>
700 const _Compare& __x,
const _Sequence& __s,
701 const _Alloc& __alloc)
702 : c(__s, __alloc), comp(__x)
704 __glibcxx_requires_valid_range(__first, __last);
705 c.insert(c.end(), __first, __last);
706 std::make_heap(c.begin(), c.end(), comp);
709 template<
typename _InputIterator,
typename _Alloc,
710 typename _Requires = _Uses<_Alloc>>
712 const _Compare& __x, _Sequence&& __s,
713 const _Alloc& __alloc)
714 : c(std::
move(__s), __alloc), comp(__x)
716 __glibcxx_requires_valid_range(__first, __last);
717 c.insert(c.end(), __first, __last);
718 std::make_heap(c.begin(), c.end(), comp);
725 _GLIBCXX_NODISCARD
bool
727 {
return c.empty(); }
743 __glibcxx_requires_nonempty();
759 std::push_heap(c.begin(), c.end(), comp);
762#if __cplusplus >= 201103L
767 std::push_heap(c.begin(), c.end(), comp);
770 template<
typename... _Args>
772 emplace(_Args&&... __args)
775 std::push_heap(c.begin(), c.end(), comp);
793 __glibcxx_requires_nonempty();
794 std::pop_heap(c.begin(), c.end(), comp);
798#if __cplusplus >= 201103L
802#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
803 __is_nothrow_swappable<_Sequence>,
805 __is_nothrow_swappable<_Tp>,
807 __is_nothrow_swappable<_Compare>
812 swap(comp, __pq.comp);