98#ifdef _GLIBCXX_CONCEPT_CHECKS
101# if __cplusplus < 201103L
102 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
104 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept)
105 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
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)
190 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
194 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
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
290 push(value_type&& __x)
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__)
500#ifdef _GLIBCXX_CONCEPT_CHECKS
503# if __cplusplus < 201103L
504 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
506 __glibcxx_class_requires(_Sequence, _SequenceConcept)
507 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
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
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); }
569 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
574 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
576 : c(__a), comp(__x) { }
580 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
583 : c(__c, __a), comp(__x)
584 { std::make_heap(c.begin(), c.end(), comp); }
586 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
587 priority_queue(
const _Compare& __x, _Sequence&& __c,
const _Alloc& __a)
588 : c(
std::
move(__c), __a), comp(__x)
589 { std::make_heap(c.begin(), c.end(), comp); }
591 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
593 : c(__q.c, __a), comp(__q.comp) { }
595 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
615#if __cplusplus < 201103L
616 template<
typename _InputIterator>
618 const _Compare& __x = _Compare(),
619 const _Sequence& __s = _Sequence())
622 __glibcxx_requires_valid_range(__first, __last);
623 c.insert(c.end(), __first, __last);
624 std::make_heap(c.begin(), c.end(), comp);
629 template<
typename _InputIterator,
632 const _Compare& __x = _Compare())
633 : c(__first, __last), comp(__x)
634 { std::make_heap(c.begin(), c.end(), comp); }
641 const _Compare& __x,
const _Sequence&
__s)
644 __glibcxx_requires_valid_range(__first, __last);
645 c.insert(c.end(), __first, __last);
646 std::make_heap(c.begin(), c.end(), comp);
649 template<
typename _InputIterator,
652 const _Compare& __x, _Sequence&& __s)
655 __glibcxx_requires_valid_range(__first, __last);
656 c.insert(c.end(), __first, __last);
657 std::make_heap(c.begin(), c.end(), comp);
662 template<
typename _InputIterator,
typename _Alloc,
664 typename _Requires = _Uses<_Alloc>>
666 const _Alloc& __alloc)
667 : c(__first, __last, __alloc), comp()
668 { std::make_heap(c.begin(), c.end(), comp); }
670 template<
typename _InputIterator,
typename _Alloc,
672 typename _Requires = _Uses<_Alloc>>
674 const _Compare& __x,
const _Alloc& __alloc)
675 : c(__first, __last, __alloc), comp(__x)
676 { std::make_heap(c.begin(), c.end(), comp); }
678 template<
typename _InputIterator,
typename _Alloc,
680 typename _Requires = _Uses<_Alloc>>
682 const _Compare& __x,
const _Sequence& __s,
683 const _Alloc& __alloc)
684 : c(__s, __alloc), comp(__x)
686 __glibcxx_requires_valid_range(__first, __last);
687 c.insert(c.end(), __first, __last);
688 std::make_heap(c.begin(), c.end(), comp);
691 template<
typename _InputIterator,
typename _Alloc,
692 typename _Requires = _Uses<_Alloc>>
694 const _Compare& __x, _Sequence&& __s,
695 const _Alloc& __alloc)
696 : c(
std::
move(__s), __alloc), comp(__x)
698 __glibcxx_requires_valid_range(__first, __last);
699 c.insert(c.end(), __first, __last);
700 std::make_heap(c.begin(), c.end(), comp);
707 _GLIBCXX_NODISCARD
bool
709 {
return c.empty(); }
725 __glibcxx_requires_nonempty();
741 std::push_heap(c.begin(), c.end(), comp);
744#if __cplusplus >= 201103L
746 push(value_type&& __x)
749 std::push_heap(c.begin(), c.end(), comp);
752 template<
typename... _Args>
754 emplace(_Args&&... __args)
757 std::push_heap(c.begin(), c.end(), comp);
775 __glibcxx_requires_nonempty();
776 std::pop_heap(c.begin(), c.end(), comp);
780#if __cplusplus >= 201103L
784#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
794 swap(comp,
__pq.comp);