57 #define _STL_QUEUE_H 1 61 #if __cplusplus >= 201103L 62 # include <bits/uses_allocator.h> 65 namespace std _GLIBCXX_VISIBILITY(default)
67 _GLIBCXX_BEGIN_NAMESPACE_VERSION
95 template<
typename _Tp,
typename _Sequence = deque<_Tp> >
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 __cplusplus >= 201103L 118 template<
typename _Alloc>
119 using _Uses =
typename 120 enable_if<uses_allocator<_Sequence, _Alloc>::value>::type;
124 typedef typename _Sequence::value_type value_type;
125 typedef typename _Sequence::reference reference;
126 typedef typename _Sequence::const_reference const_reference;
127 typedef typename _Sequence::size_type size_type;
128 typedef _Sequence container_type;
145 #if __cplusplus < 201103L 147 queue(
const _Sequence& __c = _Sequence())
150 template<
typename _Seq = _Sequence,
typename _Requires =
typename 151 enable_if<is_default_constructible<_Seq>::value>::type>
156 queue(
const _Sequence& __c)
160 queue(_Sequence&& __c)
161 :
c(std::move(__c)) { }
163 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
165 queue(
const _Alloc& __a)
168 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
169 queue(
const _Sequence& __c,
const _Alloc& __a)
172 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
173 queue(_Sequence&& __c,
const _Alloc& __a)
174 :
c(std::move(__c), __a) { }
176 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
180 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
182 :
c(std::move(__q.
c), __a) { }
190 {
return c.empty(); }
204 __glibcxx_requires_nonempty();
215 __glibcxx_requires_nonempty();
226 __glibcxx_requires_nonempty();
237 __glibcxx_requires_nonempty();
252 { c.push_back(__x); }
254 #if __cplusplus >= 201103L 256 push(value_type&& __x)
257 { c.push_back(std::move(__x)); }
259 #if __cplusplus > 201402L 260 template<
typename... _Args>
262 emplace(_Args&&... __args)
263 {
return c.emplace_back(std::forward<_Args>(__args)...); }
265 template<
typename... _Args>
267 emplace(_Args&&... __args)
268 { c.emplace_back(std::forward<_Args>(__args)...); }
286 __glibcxx_requires_nonempty();
290 #if __cplusplus >= 201103L 293 #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 294 noexcept(__is_nothrow_swappable<_Sequence>::value)
296 noexcept(__is_nothrow_swappable<_Tp>::value)
302 #endif // __cplusplus >= 201103L 316 template<
typename _Tp,
typename _Seq>
319 {
return __x.
c == __y.
c; }
334 template<
typename _Tp,
typename _Seq>
337 {
return __x.
c < __y.c; }
340 template<
typename _Tp,
typename _Seq>
343 {
return !(__x == __y); }
346 template<
typename _Tp,
typename _Seq>
349 {
return __y < __x; }
352 template<
typename _Tp,
typename _Seq>
355 {
return !(__y < __x); }
358 template<
typename _Tp,
typename _Seq>
361 {
return !(__x < __y); }
363 #if __cplusplus >= 201103L 364 template<
typename _Tp,
typename _Seq>
366 #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 368 typename enable_if<__is_swappable<_Seq>::value>::type
373 noexcept(noexcept(__x.swap(__y)))
376 template<
typename _Tp,
typename _Seq,
typename _Alloc>
379 #endif // __cplusplus >= 201103L 421 template<
typename _Tp,
typename _Sequence = vector<_Tp>,
422 typename _Compare = less<
typename _Sequence::value_type> >
425 #ifdef _GLIBCXX_CONCEPT_CHECKS 427 typedef typename _Sequence::value_type _Sequence_value_type;
428 # if __cplusplus < 201103L 429 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
431 __glibcxx_class_requires(_Sequence, _SequenceConcept)
432 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
433 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
434 __glibcxx_class_requires4(_Compare,
bool, _Tp, _Tp,
435 _BinaryFunctionConcept)
438 #if __cplusplus >= 201103L 439 template<
typename _Alloc>
440 using _Uses =
typename 441 enable_if<uses_allocator<_Sequence, _Alloc>::value>::type;
445 typedef typename _Sequence::value_type value_type;
446 typedef typename _Sequence::reference reference;
447 typedef typename _Sequence::const_reference const_reference;
448 typedef typename _Sequence::size_type size_type;
449 typedef _Sequence container_type;
452 typedef _Compare value_compare;
463 #if __cplusplus < 201103L 466 const _Sequence& __s = _Sequence())
470 template<
typename _Seq = _Sequence,
typename _Requires =
typename 471 enable_if<__and_<is_default_constructible<_Compare>,
472 is_default_constructible<_Seq>>::value>::type>
482 priority_queue(
const _Compare& __x, _Sequence&& __s = _Sequence())
483 :
c(std::move(__s)), comp(__x)
486 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
488 priority_queue(
const _Alloc& __a)
491 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
492 priority_queue(
const _Compare& __x,
const _Alloc& __a)
493 :
c(__a), comp(__x) { }
495 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
496 priority_queue(
const _Compare& __x,
const _Sequence& __c,
498 :
c(__c, __a), comp(__x) { }
500 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
501 priority_queue(
const _Compare& __x, _Sequence&& __c,
const _Alloc& __a)
502 :
c(std::move(__c), __a), comp(__x) { }
504 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
505 priority_queue(
const priority_queue& __q,
const _Alloc& __a)
506 :
c(__q.c, __a), comp(__q.comp) { }
508 template<
typename _Alloc,
typename _Requires = _Uses<_Alloc>>
509 priority_queue(priority_queue&& __q,
const _Alloc& __a)
510 :
c(std::move(__q.c), __a), comp(std::move(__q.comp)) { }
528 #if __cplusplus < 201103L 529 template<
typename _InputIterator>
530 priority_queue(_InputIterator __first, _InputIterator __last,
531 const _Compare& __x = _Compare(),
532 const _Sequence& __s = _Sequence())
535 __glibcxx_requires_valid_range(__first, __last);
536 c.insert(c.end(), __first, __last);
540 template<
typename _InputIterator>
543 const _Sequence& __s)
546 __glibcxx_requires_valid_range(__first, __last);
547 c.insert(c.end(), __first, __last);
551 template<
typename _InputIterator>
552 priority_queue(_InputIterator __first, _InputIterator __last,
553 const _Compare& __x = _Compare(),
554 _Sequence&& __s = _Sequence())
555 :
c(std::move(__s)), comp(__x)
557 __glibcxx_requires_valid_range(__first, __last);
558 c.insert(c.end(), __first, __last);
568 {
return c.empty(); }
582 __glibcxx_requires_nonempty();
601 #if __cplusplus >= 201103L 603 push(value_type&& __x)
605 c.push_back(std::move(__x));
609 template<
typename... _Args>
611 emplace(_Args&&... __args)
613 c.emplace_back(std::forward<_Args>(__args)...);
632 __glibcxx_requires_nonempty();
637 #if __cplusplus >= 201103L 639 swap(priority_queue& __pq)
641 #
if __cplusplus > 201402L || !defined(__STRICT_ANSI__)
642 __is_nothrow_swappable<_Sequence>,
644 __is_nothrow_swappable<_Tp>,
646 __is_nothrow_swappable<_Compare>
651 swap(comp, __pq.comp);
653 #endif // __cplusplus >= 201103L 658 #if __cplusplus >= 201103L 659 template<
typename _Tp,
typename _Sequence,
typename _Compare>
661 #if __cplusplus > 201402L || !defined(__STRICT_ANSI__) // c++1z or gnu++11 663 typename enable_if<__and_<__is_swappable<_Sequence>,
664 __is_swappable<_Compare>>::value>::type
670 noexcept(noexcept(__x.swap(__y)))
673 template<
typename _Tp,
typename _Sequence,
typename _Compare,
675 struct uses_allocator<priority_queue<_Tp, _Sequence, _Compare>, _Alloc>
677 #endif // __cplusplus >= 201103L 679 _GLIBCXX_END_NAMESPACE_VERSION
void pop()
Removes first element.
queue()
Default constructor creates no elements.
const_reference top() const
void make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Construct a heap over a range using comparison functor.
void push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Push an element onto a heap using comparison functor.
priority_queue()
Default constructor creates no elements.
const_reference back() const
ISO C++ entities toplevel namespace is std.
void push(const value_type &__x)
Add data to the end of the queue.
void push(const value_type &__x)
Add data to the queue.
void pop()
Removes first element.
priority_queue(_InputIterator __first, _InputIterator __last, const _Compare &__x, const _Sequence &__s)
Builds a queue from a range.
void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Pop an element off a heap using comparison functor.
_Sequence c
c is the underlying container.
A standard container giving FIFO behavior.
Declare uses_allocator so it can be specialized in <queue> etc.
const_reference front() const
A standard container automatically sorting its contents.