43 :
public _GLIBCXX_STD_C::multiset<_Key, _Compare, _Allocator>,
44 public _Ordered_profile<multiset<_Key, _Compare, _Allocator> >
46 typedef _GLIBCXX_STD_C::multiset<_Key, _Compare, _Allocator>
_Base;
48 typedef typename _Base::iterator _Base_iterator;
49 typedef typename _Base::const_iterator _Base_const_iterator;
54 typedef _Key value_type;
55 typedef _Compare key_compare;
56 typedef _Compare value_compare;
58 typedef typename _Base::reference reference;
59 typedef typename _Base::const_reference const_reference;
61 typedef __iterator_tracker<_Base_iterator,
63 typedef __iterator_tracker<_Base_const_iterator,
68 typedef typename _Base::size_type size_type;
69 typedef typename _Base::difference_type difference_type;
73#if __cplusplus < 201103L
86 explicit multiset(
const _Compare& __comp,
88 :
_Base(__comp, __a) { }
90#if __cplusplus >= 201103L
94 template<
typename _InputIterator>
97 const _Compare& __comp = _Compare(),
99 :
_Base(__first, __last, __comp, __a) { }
101#if __cplusplus >= 201103L
103 const _Compare& __comp = _Compare(),
112 :
_Base(__x, __a) { }
115 noexcept(
noexcept(
_Base(std::move(__x), __a)) )
116 :
_Base(std::move(__x), __a) { }
121 template<
typename _InputIterator>
124 :
_Base(__first, __last, __a) { }
130#if __cplusplus < 201103L
134 this->_M_profile_destruct();
136 this->_M_profile_construct();
141 operator=(
const multiset&) =
default;
149 this->_M_profile_destruct();
151 this->_M_profile_construct();
159 {
return iterator(_Base::begin(),
this); }
167 {
return iterator(_Base::end(),
this); }
173#if __cplusplus >= 201103L
175 cbegin()
const noexcept
179 cend()
const noexcept
186 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
193 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
200 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
207 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
211#if __cplusplus >= 201103L
213 crbegin()
const noexcept
215 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
220 crend()
const noexcept
222 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
236#if __cplusplus >= 201103L
237 template<
typename...
_Args>
243 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
247 template<
typename...
_Args>
254 __profcxx_map2umap_insert(this->_M_map2umap_info,
261 insert(
const value_type& __x)
263 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
264 return iterator(_Base::insert(__x),
this);
267#if __cplusplus >= 201103L
269 insert(value_type&& __x)
271 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
272 return iterator(_Base::insert(std::move(__x)),
this);
280 _Base_iterator
__res = _Base::insert(
__pos.base(), __x);
282 __profcxx_map2umap_insert(this->_M_map2umap_info,
287#if __cplusplus >= 201103L
292 auto __res = _Base::insert(
__pos.base(), std::move(__x));
293 __profcxx_map2umap_insert(this->_M_map2umap_info,
299#if __cplusplus >= 201103L
303 template<
typename _InputIterator>
308 for (; __first != __last; ++__first)
312#if __cplusplus >= 201103L
315 { insert(
__l.begin(),
__l.end()); }
318#if __cplusplus >= 201103L
322 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
329 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
330 _Base::erase(
__pos.base());
337 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
338 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
339 return _Base::erase(__x);
342#if __cplusplus >= 201103L
346 if (__first != __last)
349 for (; __first != __last;)
350 __ret = erase(__first++);
354 return iterator(_Base::erase(__first.base(), __last.base()),
this);
360 for (; __first != __last;)
368 this->_M_profile_destruct();
370 this->_M_profile_construct();
376 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
377 return _Base::count(__x);
380#if __cplusplus > 201103L
381 template<
typename _Kt,
383 typename __has_is_transparent<_Compare, _Kt>::type>
385 count(
const _Kt& __x)
const
387 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
388 return _Base::count(__x);
396 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
397 return iterator(_Base::find(__x),
this);
405 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
409#if __cplusplus > 201103L
410 template<
typename _Kt,
412 typename __has_is_transparent<_Compare, _Kt>::type>
416 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
417 return { _Base::find(__x),
this };
420 template<
typename _Kt,
422 typename __has_is_transparent<_Compare, _Kt>::type>
424 find(
const _Kt& __x)
const
426 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
427 return { _Base::find(__x),
this };
434 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
435 return iterator(_Base::lower_bound(__x),
this);
441 lower_bound(
const key_type& __x)
const
443 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
444 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
448#if __cplusplus > 201103L
449 template<
typename _Kt,
451 typename __has_is_transparent<_Compare, _Kt>::type>
453 lower_bound(
const _Kt& __x)
455 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
456 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
457 return { _Base::lower_bound(__x),
this };
460 template<
typename _Kt,
462 typename __has_is_transparent<_Compare, _Kt>::type>
464 lower_bound(
const _Kt& __x)
const
466 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
467 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
468 return { _Base::lower_bound(__x),
this };
475 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
476 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
477 return iterator(_Base::upper_bound(__x),
this);
483 upper_bound(
const key_type& __x)
const
485 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
486 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
490#if __cplusplus > 201103L
491 template<
typename _Kt,
493 typename __has_is_transparent<_Compare, _Kt>::type>
495 upper_bound(
const _Kt& __x)
497 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
498 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
499 return { _Base::upper_bound(__x),
this };
502 template<
typename _Kt,
504 typename __has_is_transparent<_Compare, _Kt>::type>
506 upper_bound(
const _Kt& __x)
const
508 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
509 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
510 return { _Base::upper_bound(__x),
this };
517 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
519 = _Base::equal_range(__x);
527 equal_range(
const key_type& __x)
const
529 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
531 = _Base::equal_range(__x);
536#if __cplusplus > 201103L
537 template<
typename _Kt,
539 typename __has_is_transparent<_Compare, _Kt>::type>
541 equal_range(
const _Kt& __x)
543 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
544 auto __res = _Base::equal_range(__x);
545 return { {
__res.first,
this }, {
__res.second,
this } };
548 template<
typename _Kt,
550 typename __has_is_transparent<_Compare, _Kt>::type>
552 equal_range(
const _Kt& __x)
const
554 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
555 auto __res = _Base::equal_range(__x);
556 return { {
__res.first,
this }, {
__res.second,
this } };
574 _M_hint_used(_Base_const_iterator
__hint, _Base_iterator
__res)
577 || (
__hint == _M_base().end() && ++
__res == _M_base().end())
582 template<
typename _K1,
typename _C1,
typename _A1>
587 template<
typename _K1,
typename _C1,
typename _A1>