42 :
public _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Allocator>,
43 public _Ordered_profile<map<_Key, _Tp, _Compare, _Allocator> >
45 typedef _GLIBCXX_STD_C::map<_Key, _Tp, _Compare, _Allocator>
_Base;
53 typedef _Tp mapped_type;
54 typedef typename _Base::value_type value_type;
55 typedef _Compare key_compare;
56 typedef typename _Base::reference reference;
57 typedef typename _Base::const_reference const_reference;
65 typedef typename _Base::size_type size_type;
66 typedef typename _Base::difference_type difference_type;
70#if __cplusplus < 201103L
85 map(
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) { }
103#if __cplusplus >= 201103L
105 const _Compare& __c = _Compare(),
114 :
_Base(__x, __a) { }
117 noexcept(
noexcept(
_Base(std::move(__x), __a)) )
118 :
_Base(std::move(__x), __a) { }
123 template<
typename _InputIterator>
126 :
_Base(__first, __last, __a) { }
129#if __cplusplus < 201103L
131 operator=(
const map& __x)
133 this->_M_profile_destruct();
135 this->_M_profile_construct();
140 operator=(
const map&) =
default;
143 operator=(
map&&) =
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);
230 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
231 return _Base::operator[](
__k);
234#if __cplusplus >= 201103L
238 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
239 return _Base::operator[](std::move(
__k));
246 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
247 return _Base::at(
__k);
253 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
254 return _Base::at(
__k);
258#if __cplusplus >= 201103L
259 template<
typename...
_Args>
265 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
271 template<
typename...
_Args>
278 __profcxx_map2umap_insert(this->_M_map2umap_info,
285 insert(
const value_type& __x)
287 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
293#if __cplusplus >= 201103L
294 template<
typename _Pair,
typename =
typename
296 _Pair&&>::value>::type>
300 __profcxx_map2umap_insert(this->_M_map2umap_info, this->size(), 1);
307#if __cplusplus >= 201103L
314#if __cplusplus >= 201103L
323 __profcxx_map2umap_insert(this->_M_map2umap_info,
328#if __cplusplus >= 201103L
329 template<
typename _Pair,
typename =
typename
331 _Pair&&>::value>::type>
338 __profcxx_map2umap_insert(this->_M_map2umap_info,
344 template<
typename _InputIterator>
348 for (; __first != __last; ++__first)
352#if __cplusplus >= 201103L
356 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
363 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
370 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
371 _Base::erase(
__pos.base());
378 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
379 __profcxx_map2umap_erase(this->_M_map2umap_info, this->size(), 1);
380 return _Base::erase(__x);
383#if __cplusplus >= 201103L
387 if (__first != __last)
390 for (; __first != __last;)
391 __ret = erase(__first++);
395 return iterator(_Base::erase(__first.base(), __last.base()),
this);
401 for (; __first != __last;)
417 this->_M_profile_destruct();
419 this->_M_profile_construct();
426 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
427 return iterator(_Base::find(__x),
this);
430#if __cplusplus > 201103L
431 template<
typename _Kt,
433 typename __has_is_transparent<_Compare, _Kt>::type>
437 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
438 return { _Base::find(__x),
this };
445 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
449#if __cplusplus > 201103L
450 template<
typename _Kt,
452 typename __has_is_transparent<_Compare, _Kt>::type>
454 find(
const _Kt& __x)
const
456 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
457 return { _Base::find(__x),
this };
464 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
465 return _Base::count(__x);
468#if __cplusplus > 201103L
469 template<
typename _Kt,
471 typename __has_is_transparent<_Compare, _Kt>::type>
473 count(
const _Kt& __x)
const
475 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
476 return _Base::count(__x);
483 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
484 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
485 return iterator(_Base::lower_bound(__x),
this);
488#if __cplusplus > 201103L
489 template<
typename _Kt,
491 typename __has_is_transparent<_Compare, _Kt>::type>
493 lower_bound(
const _Kt& __x)
495 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
496 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
497 return { _Base::lower_bound(__x),
this };
502 lower_bound(
const key_type& __x)
const
504 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
505 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
509#if __cplusplus > 201103L
510 template<
typename _Kt,
512 typename __has_is_transparent<_Compare, _Kt>::type>
514 lower_bound(
const _Kt& __x)
const
516 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
517 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
518 return { _Base::lower_bound(__x),
this };
525 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
526 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
527 return iterator(_Base::upper_bound(__x),
this);
530#if __cplusplus > 201103L
531 template<
typename _Kt,
533 typename __has_is_transparent<_Compare, _Kt>::type>
535 upper_bound(
const _Kt& __x)
537 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
538 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
539 return { _Base::upper_bound(__x),
this };
544 upper_bound(
const key_type& __x)
const
546 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
547 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
551#if __cplusplus > 201103L
552 template<
typename _Kt,
554 typename __has_is_transparent<_Compare, _Kt>::type>
556 upper_bound(
const _Kt& __x)
const
558 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
559 __profcxx_map2umap_invalidate(this->_M_map2umap_info);
560 return { _Base::upper_bound(__x),
this };
567 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
569 = _Base::equal_range(__x);
574#if __cplusplus > 201103L
575 template<
typename _Kt,
577 typename __has_is_transparent<_Compare, _Kt>::type>
579 equal_range(
const _Kt& __x)
581 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
582 auto __res = _Base::equal_range(__x);
583 return { {
__res.first,
this }, {
__res.second,
this } };
588 equal_range(
const key_type& __x)
const
590 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
592 = _Base::equal_range(__x);
597#if __cplusplus > 201103L
598 template<
typename _Kt,
600 typename __has_is_transparent<_Compare, _Kt>::type>
602 equal_range(
const _Kt& __x)
const
604 __profcxx_map2umap_find(this->_M_map2umap_info, this->size());
605 auto __res = _Base::equal_range(__x);
606 return { {
__res.first,
this }, {
__res.second,
this } };
627 || (
__hint == _M_base().end() && ++
__res == _M_base().end())
633 template<
typename _K1,
typename _T1,
typename _C1,
typename _A1>
638 template<
typename _K1,
typename _T1,
typename _C1,
typename _A1>