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
132 static_assert(is_same<_Tp, typename _Sequence::value_type>::value,
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) { }
198#if __cplusplus > 202002L
199#define __cpp_lib_adaptor_iterator_pair_constructor 202106L
201 template<
typename _InputIterator,
202 typename = _RequireInputIter<_InputIterator>>
203 queue(_InputIterator __first, _InputIterator __last)
204 :
c(__first, __last) { }
206 template<
typename _InputIterator,
typename _Alloc,
207 typename = _RequireInputIter<_InputIterator>,
208 typename = _Uses<_Alloc>>
209 queue(_InputIterator __first, _InputIterator __last,
const _Alloc& __a)
210 :
c(__first, __last, __a) { }
217 _GLIBCXX_NODISCARD
bool
219 {
return c.empty(); }
235 __glibcxx_requires_nonempty();
247 __glibcxx_requires_nonempty();
259 __glibcxx_requires_nonempty();
271 __glibcxx_requires_nonempty();
286 {
c.push_back(__x); }
288#if __cplusplus >= 201103L
293#if __cplusplus > 201402L
294 template<
typename... _Args>
296 emplace(_Args&&... __args)
299 template<
typename... _Args>
301 emplace(_Args&&... __args)
320 __glibcxx_requires_nonempty();
324#if __cplusplus >= 201103L
327#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
328 noexcept(__is_nothrow_swappable<_Sequence>::value)
330 noexcept(__is_nothrow_swappable<_Tp>::value)
500#ifdef _GLIBCXX_CONCEPT_CHECKS
502 typedef typename _Sequence::value_type _Sequence_value_type;
503# if __cplusplus < 201103L
504 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
506 __glibcxx_class_requires(_Sequence, _SequenceConcept)
507 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
508 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
509 __glibcxx_class_requires4(_Compare,
bool, _Tp, _Tp,
510 _BinaryFunctionConcept)
513#if __cplusplus >= 201103L
514 template<
typename _Alloc>
515 using _Uses =
typename
518#if __cplusplus >= 201703L
522 static_assert(is_same<_Tp, typename _Sequence::value_type>::value,
523 "value_type must be the same as the underlying container");
528 typedef typename _Sequence::value_type value_type;
529 typedef typename _Sequence::reference reference;
530 typedef typename _Sequence::const_reference const_reference;
531 typedef typename _Sequence::size_type size_type;
532 typedef _Sequence container_type;
535 typedef _Compare value_compare;
546#if __cplusplus < 201103L
549 const _Sequence& __s = _Sequence())
551 { std::make_heap(c.begin(), c.end(), comp); }
553 template<
typename _Seq = _Sequence,
typename _Requires =
typename
562 { std::make_heap(c.begin(), c.end(), comp); }
565 priority_queue(
const _Compare& __x, _Sequence&& __s = _Sequence())
567 { std::make_heap(c.begin(), c.end(), comp); }
573 noexcept(__and_<is_nothrow_move_constructible<_Sequence>,
574 is_nothrow_move_constructible<_Compare>>::value)
575 : c(std::
move(__q.c)), comp(std::
move(__q.comp))
580 noexcept(__and_<is_nothrow_move_assignable<_Sequence>,
581 is_nothrow_move_assignable<_Compare>>::value)
589 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
594 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
596 : c(__a), comp(__x) { }
600 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
603 : c(__c, __a), comp(__x)
604 { std::make_heap(c.begin(), c.end(), comp); }
606 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
607 priority_queue(
const _Compare& __x, _Sequence&& __c,
const _Alloc& __a)
608 : c(std::
move(__c), __a), comp(__x)
609 { std::make_heap(c.begin(), c.end(), comp); }
611 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
613 : c(__q.c, __a), comp(__q.comp) { }
615 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
617 : c(std::
move(__q.c), __a), comp(std::
move(__q.comp))
635#if __cplusplus < 201103L
636 template<
typename _InputIterator>
638 const _Compare& __x = _Compare(),
639 const _Sequence& __s = _Sequence())
642 __glibcxx_requires_valid_range(__first, __last);
643 c.insert(c.end(), __first, __last);
644 std::make_heap(c.begin(), c.end(), comp);
649 template<
typename _InputIterator,
650 typename = std::_RequireInputIter<_InputIterator>>
652 const _Compare& __x = _Compare())
653 : c(__first, __last), comp(__x)
654 { std::make_heap(c.begin(), c.end(), comp); }
658 template<
typename _InputIterator,
659 typename = std::_RequireInputIter<_InputIterator>>
661 const _Compare& __x,
const _Sequence& __s)
664 __glibcxx_requires_valid_range(__first, __last);
665 c.insert(c.end(), __first, __last);
666 std::make_heap(c.begin(), c.end(), comp);
669 template<
typename _InputIterator,
670 typename = std::_RequireInputIter<_InputIterator>>
672 const _Compare& __x, _Sequence&& __s)
675 __glibcxx_requires_valid_range(__first, __last);
676 c.insert(c.end(), __first, __last);
677 std::make_heap(c.begin(), c.end(), comp);
682 template<
typename _InputIterator,
typename _Alloc,
683 typename = std::_RequireInputIter<_InputIterator>,
684 typename _Requires = _Uses<_Alloc>>
686 const _Alloc& __alloc)
687 : c(__first, __last, __alloc), comp()
688 { std::make_heap(c.begin(), c.end(), comp); }
690 template<
typename _InputIterator,
typename _Alloc,
691 typename = std::_RequireInputIter<_InputIterator>,
692 typename _Requires = _Uses<_Alloc>>
694 const _Compare& __x,
const _Alloc& __alloc)
695 : c(__first, __last, __alloc), comp(__x)
696 { std::make_heap(c.begin(), c.end(), comp); }
698 template<
typename _InputIterator,
typename _Alloc,
699 typename = std::_RequireInputIter<_InputIterator>,
700 typename _Requires = _Uses<_Alloc>>
702 const _Compare& __x,
const _Sequence& __s,
703 const _Alloc& __alloc)
704 : c(__s, __alloc), comp(__x)
706 __glibcxx_requires_valid_range(__first, __last);
707 c.insert(c.end(), __first, __last);
708 std::make_heap(c.begin(), c.end(), comp);
711 template<
typename _InputIterator,
typename _Alloc,
712 typename _Requires = _Uses<_Alloc>>
714 const _Compare& __x, _Sequence&& __s,
715 const _Alloc& __alloc)
716 : c(std::
move(__s), __alloc), comp(__x)
718 __glibcxx_requires_valid_range(__first, __last);
719 c.insert(c.end(), __first, __last);
720 std::make_heap(c.begin(), c.end(), comp);
727 _GLIBCXX_NODISCARD
bool
729 {
return c.empty(); }
745 __glibcxx_requires_nonempty();
761 std::push_heap(c.begin(), c.end(), comp);
764#if __cplusplus >= 201103L
769 std::push_heap(c.begin(), c.end(), comp);
772 template<
typename... _Args>
774 emplace(_Args&&... __args)
777 std::push_heap(c.begin(), c.end(), comp);
795 __glibcxx_requires_nonempty();
796 std::pop_heap(c.begin(), c.end(), comp);
800#if __cplusplus >= 201103L
804#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
805 __is_nothrow_swappable<_Sequence>,
807 __is_nothrow_swappable<_Tp>,
809 __is_nothrow_swappable<_Compare>
814 swap(comp, __pq.comp);