43 :
public _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator>,
44 public _Ordered_profile<map<_Key, _Tp, _Compare, _Allocator> >
46 typedef _GLIBCXX_STD_C::multimap<_Key, _Tp, _Compare, _Allocator>
_Base;
48 typedef typename _Base::iterator _Base_iterator;
49 typedef typename _Base::const_iterator _Base_const_iterator;
54 typedef _Tp mapped_type;
56 typedef _Compare key_compare;
57 typedef typename _Base::reference reference;
58 typedef typename _Base::const_reference const_reference;
60 typedef __iterator_tracker<_Base_iterator,
62 typedef __iterator_tracker<_Base_const_iterator,
67 typedef typename _Base::size_type size_type;
68 typedef typename _Base::difference_type difference_type;
72#if __cplusplus < 201103L
85 explicit multimap(
const _Compare& __comp,
87 :
_Base(__comp, __a) { }
89#if __cplusplus >= 201103L
93 template<
typename _InputIterator>
96 const _Compare& __comp = _Compare(),
98 :
_Base(__first, __last, __comp, __a) { }
100#if __cplusplus >= 201103L
102 const _Compare& __c = _Compare(),
111 :
_Base(__x, __a) { }
114 noexcept(
noexcept(
_Base(std::move(__x), __a)) )
115 :
_Base(std::move(__x), __a) { }
120 template<
typename _InputIterator>
123 :
_Base(__first, __last, __a) { }
129#if __cplusplus < 201103L
133 this->_M_profile_destruct();
135 this->_M_profile_construct();
140 operator=(
const multimap&) =
default;
148 this->_M_profile_destruct();
150 this->_M_profile_construct();
158 {
return iterator(_Base::begin(),
this); }
166 {
return iterator(_Base::end(),
this); }
172#if __cplusplus >= 201103L
174 cbegin()
const noexcept
178 cend()
const noexcept
185 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
192 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
199 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
206 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
210#if __cplusplus >= 201103L
212 crbegin()
const noexcept
214 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
219 crend()
const noexcept
221 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
227#if __cplusplus >= 201103L
228 template<
typename...
_Args>
232 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
236 template<
typename...
_Args>
243 __profcxx_map2umap_insert(this->_M_map2umap_info,
252 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
253 return iterator(_Base::insert(__x),
this);
256#if __cplusplus >= 201103L
257 template<
typename _Pair,
typename =
typename
259 _Pair&&>::value>::type>
263 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
268#if __cplusplus >= 201103L
275#if __cplusplus >= 201103L
282 _Base_iterator
__res = _Base::insert(
__pos.base(), __x);
283 __profcxx_map2umap_insert(this->_M_map2umap_info,
288#if __cplusplus >= 201103L
289 template<
typename _Pair,
typename =
typename
291 _Pair&&>::value>::type>
297 __profcxx_map2umap_insert(this->_M_map2umap_info,
303 template<
typename _InputIterator>
307 for (; __first != __last; ++__first)
311#if __cplusplus >= 201103L
315 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
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;)
369 std::swap(this->_M_map2umap_info, __x._M_map2umap_info);
376 this->_M_profile_destruct();
378 this->_M_profile_construct();
385 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
386 return iterator(_Base::find(__x),
this);
389#if __cplusplus > 201103L
390 template<
typename _Kt,
392 typename __has_is_transparent<_Compare, _Kt>::type>
396 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
397 return { _Base::find(__x),
this };
404 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
408#if __cplusplus > 201103L
409 template<
typename _Kt,
411 typename __has_is_transparent<_Compare, _Kt>::type>
413 find(
const _Kt& __x)
const
415 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
416 return { _Base::find(__x),
this };
423 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
424 return _Base::count(__x);
427#if __cplusplus > 201103L
428 template<
typename _Kt,
430 typename __has_is_transparent<_Compare, _Kt>::type>
432 count(
const _Kt& __x)
const
434 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
435 return _Base::count(__x);
442 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
443 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
444 return iterator(_Base::lower_bound(__x),
this);
447#if __cplusplus > 201103L
448 template<
typename _Kt,
450 typename __has_is_transparent<_Compare, _Kt>::type>
452 lower_bound(
const _Kt& __x)
454 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
455 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
456 return { _Base::lower_bound(__x),
this };
461 lower_bound(
const key_type& __x)
const
463 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
464 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
468#if __cplusplus > 201103L
469 template<
typename _Kt,
471 typename __has_is_transparent<_Compare, _Kt>::type>
473 lower_bound(
const _Kt& __x)
const
475 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
476 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
477 return { _Base::lower_bound(__x),
this };
484 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
485 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
486 return iterator(_Base::upper_bound(__x),
this);
489#if __cplusplus > 201103L
490 template<
typename _Kt,
492 typename __has_is_transparent<_Compare, _Kt>::type>
494 upper_bound(
const _Kt& __x)
496 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
497 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
498 return { _Base::upper_bound(__x),
this };
503 upper_bound(
const key_type& __x)
const
505 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
506 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
510#if __cplusplus > 201103L
511 template<
typename _Kt,
513 typename __has_is_transparent<_Compare, _Kt>::type>
515 upper_bound(
const _Kt& __x)
const
517 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
518 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
519 return { _Base::upper_bound(__x),
this };
526 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
528 = _Base::equal_range(__x);
533#if __cplusplus > 201103L
534 template<
typename _Kt,
536 typename __has_is_transparent<_Compare, _Kt>::type>
538 equal_range(
const _Kt& __x)
540 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
541 auto __res = _Base::equal_range(__x);
542 return { {
__res.first,
this }, {
__res.second,
this } };
547 equal_range(
const key_type& __x)
const
549 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
551 = _Base::equal_range(__x);
556#if __cplusplus > 201103L
557 template<
typename _Kt,
559 typename __has_is_transparent<_Compare, _Kt>::type>
561 equal_range(
const _Kt& __x)
const
563 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
564 auto __res = _Base::equal_range(__x);
565 return { {
__res.first,
this }, {
__res.second,
this } };
583 _M_hint_used(_Base_const_iterator
__hint, _Base_iterator
__res)
586 || (
__hint == _M_base().end() && ++
__res == _M_base().end())
591 template<
typename _K1,
typename _T1,
typename _C1,
typename _A1>
596 template<
typename _K1,
typename _T1,
typename _C1,
typename _A1>