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>
119 friend compare_three_way_result_t<_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) { }
202 _GLIBCXX_NODISCARD
bool
204 {
return c.empty(); }
218 __glibcxx_requires_nonempty();
229 __glibcxx_requires_nonempty();
240 __glibcxx_requires_nonempty();
251 __glibcxx_requires_nonempty();
266 {
c.push_back(__x); }
268#if __cplusplus >= 201103L
273#if __cplusplus > 201402L
274 template<
typename... _Args>
276 emplace(_Args&&... __args)
279 template<
typename... _Args>
281 emplace(_Args&&... __args)
300 __glibcxx_requires_nonempty();
304#if __cplusplus >= 201103L
307#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
308 noexcept(__is_nothrow_swappable<_Sequence>::value)
310 noexcept(__is_nothrow_swappable<_Tp>::value)
458#ifdef _GLIBCXX_CONCEPT_CHECKS
460 typedef typename _Sequence::value_type _Sequence_value_type;
461# if __cplusplus < 201103L
462 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
464 __glibcxx_class_requires(_Sequence, _SequenceConcept)
465 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
466 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
467 __glibcxx_class_requires4(_Compare,
bool, _Tp, _Tp,
468 _BinaryFunctionConcept)
471#if __cplusplus >= 201103L
472 template<
typename _Alloc>
473 using _Uses =
typename
476#if __cplusplus >= 201703L
480 static_assert(is_same<_Tp, typename _Sequence::value_type>::value,
481 "value_type must be the same as the underlying container");
486 typedef typename _Sequence::value_type value_type;
487 typedef typename _Sequence::reference reference;
488 typedef typename _Sequence::const_reference const_reference;
489 typedef typename _Sequence::size_type size_type;
490 typedef _Sequence container_type;
493 typedef _Compare value_compare;
504#if __cplusplus < 201103L
507 const _Sequence& __s = _Sequence())
509 { std::make_heap(c.begin(), c.end(), comp); }
511 template<
typename _Seq = _Sequence,
typename _Requires =
typename
520 { std::make_heap(c.begin(), c.end(), comp); }
523 priority_queue(
const _Compare& __x, _Sequence&& __s = _Sequence())
525 { std::make_heap(c.begin(), c.end(), comp); }
527 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
532 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
534 : c(__a), comp(__x) { }
538 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
541 : c(__c, __a), comp(__x)
542 { std::make_heap(c.begin(), c.end(), comp); }
544 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
545 priority_queue(
const _Compare& __x, _Sequence&& __c,
const _Alloc& __a)
546 : c(std::
move(__c), __a), comp(__x)
547 { std::make_heap(c.begin(), c.end(), comp); }
549 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
551 : c(__q.c, __a), comp(__q.comp) { }
553 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
555 : c(std::
move(__q.c), __a), comp(std::
move(__q.comp)) { }
573#if __cplusplus < 201103L
574 template<
typename _InputIterator>
576 const _Compare& __x = _Compare(),
577 const _Sequence& __s = _Sequence())
580 __glibcxx_requires_valid_range(__first, __last);
581 c.insert(c.end(), __first, __last);
582 std::make_heap(c.begin(), c.end(), comp);
585 template<
typename _InputIterator>
588 const _Sequence& __s)
591 __glibcxx_requires_valid_range(__first, __last);
592 c.insert(c.end(), __first, __last);
593 std::make_heap(c.begin(), c.end(), comp);
596 template<
typename _InputIterator>
598 const _Compare& __x = _Compare(),
599 _Sequence&& __s = _Sequence())
602 __glibcxx_requires_valid_range(__first, __last);
603 c.insert(c.end(), __first, __last);
604 std::make_heap(c.begin(), c.end(), comp);
611 _GLIBCXX_NODISCARD
bool
613 {
return c.empty(); }
627 __glibcxx_requires_nonempty();
643 std::push_heap(c.begin(), c.end(), comp);
646#if __cplusplus >= 201103L
651 std::push_heap(c.begin(), c.end(), comp);
654 template<
typename... _Args>
656 emplace(_Args&&... __args)
659 std::push_heap(c.begin(), c.end(), comp);
677 __glibcxx_requires_nonempty();
678 std::pop_heap(c.begin(), c.end(), comp);
682#if __cplusplus >= 201103L
686#if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
687 __is_nothrow_swappable<_Sequence>,
689 __is_nothrow_swappable<_Tp>,
691 __is_nothrow_swappable<_Compare>
696 swap(comp, __pq.comp);