58 #define _STL_QUEUE_H 1
63 _GLIBCXX_BEGIN_NAMESPACE(std)
88 template<typename _Tp, typename _Sequence = deque<_Tp> >
92 typedef typename _Sequence::value_type _Sequence_value_type;
93 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
94 __glibcxx_class_requires(_Sequence, _FrontInsertionSequenceConcept)
95 __glibcxx_class_requires(_Sequence, _BackInsertionSequenceConcept)
96 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
98 template<
typename _Tp1,
typename _Seq1>
102 template<
typename _Tp1,
typename _Seq1>
107 typedef typename _Sequence::value_type value_type;
108 typedef typename _Sequence::reference reference;
109 typedef typename _Sequence::const_reference const_reference;
110 typedef typename _Sequence::size_type size_type;
111 typedef _Sequence container_type;
128 #ifndef __GXX_EXPERIMENTAL_CXX0X__
130 queue(
const _Sequence& __c = _Sequence())
138 queue(_Sequence&& __c = _Sequence())
139 : c(std::move(__c)) { }
142 : c(std::move(__q.c)) { }
145 operator=(queue&& __q)
157 {
return c.empty(); }
171 __glibcxx_requires_nonempty();
182 __glibcxx_requires_nonempty();
193 __glibcxx_requires_nonempty();
204 __glibcxx_requires_nonempty();
219 { c.push_back(__x); }
221 #ifdef __GXX_EXPERIMENTAL_CXX0X__
223 push(value_type&& __x)
224 { c.push_back(std::move(__x)); }
226 template<
typename... _Args>
228 emplace(_Args&&... __args)
229 { c.emplace_back(std::forward<_Args>(__args)...); }
246 __glibcxx_requires_nonempty();
250 #ifdef __GXX_EXPERIMENTAL_CXX0X__
268 template<
typename _Tp,
typename _Seq>
271 {
return __x.
c == __y.
c; }
286 template<
typename _Tp,
typename _Seq>
289 {
return __x.
c < __y.c; }
292 template<
typename _Tp,
typename _Seq>
295 {
return !(__x == __y); }
298 template<
typename _Tp,
typename _Seq>
301 {
return __y < __x; }
304 template<
typename _Tp,
typename _Seq>
307 {
return !(__y < __x); }
310 template<
typename _Tp,
typename _Seq>
313 {
return !(__x < __y); }
315 #ifdef __GXX_EXPERIMENTAL_CXX0X__
316 template<
typename _Tp,
typename _Seq>
318 swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>& __y)
321 template<
typename _Tp,
typename _Seq>
323 swap(queue<_Tp, _Seq>&& __x, queue<_Tp, _Seq>& __y)
326 template<
typename _Tp,
typename _Seq>
328 swap(queue<_Tp, _Seq>& __x, queue<_Tp, _Seq>&& __y)
367 template<
typename _Tp,
typename _Sequence = vector<_Tp>,
368 typename _Compare = less<
typename _Sequence::value_type> >
372 typedef typename _Sequence::value_type _Sequence_value_type;
373 __glibcxx_class_requires(_Tp, _SGIAssignableConcept)
374 __glibcxx_class_requires(_Sequence, _SequenceConcept)
375 __glibcxx_class_requires(_Sequence, _RandomAccessContainerConcept)
376 __glibcxx_class_requires2(_Tp, _Sequence_value_type, _SameTypeConcept)
377 __glibcxx_class_requires4(_Compare,
bool, _Tp, _Tp,
378 _BinaryFunctionConcept)
381 typedef typename _Sequence::value_type value_type;
382 typedef typename _Sequence::reference reference;
383 typedef typename _Sequence::const_reference const_reference;
384 typedef typename _Sequence::size_type size_type;
385 typedef _Sequence container_type;
396 #ifndef __GXX_EXPERIMENTAL_CXX0X__
399 const _Sequence& __s = _Sequence())
405 const _Sequence& __s)
411 _Sequence&& __s = _Sequence())
412 : c(std::move(__s)), comp(__x)
431 #ifndef __GXX_EXPERIMENTAL_CXX0X__
432 template<
typename _InputIterator>
433 priority_queue(_InputIterator __first, _InputIterator __last,
434 const _Compare& __x = _Compare(),
435 const _Sequence& __s = _Sequence())
438 __glibcxx_requires_valid_range(__first, __last);
439 c.insert(c.end(), __first, __last);
440 std::make_heap(c.begin(), c.end(), comp);
443 template<
typename _InputIterator>
446 const _Sequence& __s)
449 __glibcxx_requires_valid_range(__first, __last);
450 c.insert(c.end(), __first, __last);
454 template<
typename _InputIterator>
456 const _Compare& __x = _Compare(),
457 _Sequence&& __s = _Sequence())
458 : c(std::move(__s)), comp(__x)
460 __glibcxx_requires_valid_range(__first, __last);
461 c.insert(c.end(), __first, __last);
465 priority_queue(priority_queue&& __pq)
466 : c(std::move(__pq.c)), comp(std::move(__pq.comp)) { }
469 operator=(priority_queue&& __pq)
482 {
return c.empty(); }
496 __glibcxx_requires_nonempty();
515 #ifdef __GXX_EXPERIMENTAL_CXX0X__
517 push(value_type&& __x)
519 c.push_back(std::move(__x));
523 template<
typename... _Args>
525 emplace(_Args&&... __args)
527 c.emplace_back(std::forward<_Args>(__args)...);
528 std::push_heap(c.begin(), c.end(), comp);
546 __glibcxx_requires_nonempty();
551 #ifdef __GXX_EXPERIMENTAL_CXX0X__
557 swap(comp, __pq.comp);
564 #ifdef __GXX_EXPERIMENTAL_CXX0X__
565 template<
typename _Tp,
typename _Sequence,
typename _Compare>
567 swap(priority_queue<_Tp, _Sequence, _Compare>& __x,
568 priority_queue<_Tp, _Sequence, _Compare>& __y)
571 template<
typename _Tp,
typename _Sequence,
typename _Compare>
573 swap(priority_queue<_Tp, _Sequence, _Compare>&& __x,
574 priority_queue<_Tp, _Sequence, _Compare>& __y)
577 template<
typename _Tp,
typename _Sequence,
typename _Compare>
579 swap(priority_queue<_Tp, _Sequence, _Compare>& __x,
580 priority_queue<_Tp, _Sequence, _Compare>&& __y)
584 _GLIBCXX_END_NAMESPACE
A standard container giving FIFO behavior.
void make_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Construct a heap over a range using comparison functor.
bool operator==(const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
Queue equality comparison.
void pop()
Removes first element.
const_reference front() const
void push(const value_type &__x)
Add data to the end of the queue.
priority_queue(_InputIterator __first, _InputIterator __last, const _Compare &__x, const _Sequence &__s)
Builds a queue from a range.
queue(const _Sequence &__c)
Default constructor creates no elements.
void push_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Push an element onto a heap using comparison functor.
A standard container automatically sorting its contents.
void pop()
Removes first element.
const_reference back() const
void pop_heap(_RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp)
Pop an element off a heap using comparison functor.
_OI move(_II __first, _II __last, _OI __result)
Moves the range [first,last) into result.
const_reference top() const
bool operator>=(const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
Based on operator<.
void push(const value_type &__x)
Add data to the queue.
bool operator!=(const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
Based on operator==.
bool operator>(const queue< _Tp, _Seq > &__x, const queue< _Tp, _Seq > &__y)
Based on operator<.
priority_queue(const _Compare &__x, const _Sequence &__s)
Default constructor creates no elements.