Home | History | Annotate | Line # | Download | only in std
      1 // <unordered_map> -*- C++ -*-
      2 
      3 // Copyright (C) 2007-2022 Free Software Foundation, Inc.
      4 //
      5 // This file is part of the GNU ISO C++ Library.  This library is free
      6 // software; you can redistribute it and/or modify it under the
      7 // terms of the GNU General Public License as published by the
      8 // Free Software Foundation; either version 3, or (at your option)
      9 // any later version.
     10 
     11 // This library is distributed in the hope that it will be useful,
     12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14 // GNU General Public License for more details.
     15 
     16 // Under Section 7 of GPL version 3, you are granted additional
     17 // permissions described in the GCC Runtime Library Exception, version
     18 // 3.1, as published by the Free Software Foundation.
     19 
     20 // You should have received a copy of the GNU General Public License and
     21 // a copy of the GCC Runtime Library Exception along with this program;
     22 // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     23 // <http://www.gnu.org/licenses/>.
     24 
     25 /** @file include/unordered_map
     26  *  This is a Standard C++ Library header.
     27  */
     28 
     29 #ifndef _GLIBCXX_UNORDERED_MAP
     30 #define _GLIBCXX_UNORDERED_MAP 1
     31 
     32 #pragma GCC system_header
     33 
     34 #if __cplusplus < 201103L
     35 # include <bits/c++0x_warning.h>
     36 #else
     37 
     38 #include <type_traits>
     39 #include <initializer_list>
     40 #include <bits/allocator.h>
     41 #include <ext/alloc_traits.h>
     42 #include <ext/aligned_buffer.h>
     43 #include <bits/stl_pair.h>
     44 #include <bits/stl_function.h> // equal_to, _Identity, _Select1st
     45 #include <bits/functional_hash.h>
     46 #include <bits/hashtable.h>
     47 #include <bits/unordered_map.h>
     48 #include <bits/range_access.h>
     49 #include <bits/erase_if.h>
     50 
     51 #ifdef _GLIBCXX_DEBUG
     52 # include <debug/unordered_map>
     53 #endif
     54 
     55 #if __cplusplus >= 201703L
     56 namespace std _GLIBCXX_VISIBILITY(default)
     57 {
     58 _GLIBCXX_BEGIN_NAMESPACE_VERSION
     59   namespace pmr
     60   {
     61     template<typename _Tp> class polymorphic_allocator;
     62     template<typename _Key, typename _Tp, typename _Hash = std::hash<_Key>,
     63 	     typename _Pred = std::equal_to<_Key>>
     64       using unordered_map
     65 	= std::unordered_map<_Key, _Tp, _Hash, _Pred,
     66 			     polymorphic_allocator<pair<const _Key, _Tp>>>;
     67     template<typename _Key, typename _Tp, typename _Hash = std::hash<_Key>,
     68 	     typename _Pred = std::equal_to<_Key>>
     69       using unordered_multimap
     70 	= std::unordered_multimap<_Key, _Tp, _Hash, _Pred,
     71 				  polymorphic_allocator<pair<const _Key, _Tp>>>;
     72   } // namespace pmr
     73 _GLIBCXX_END_NAMESPACE_VERSION
     74 } // namespace std
     75 #endif // C++17
     76 
     77 #if __cplusplus > 201703L
     78 namespace std _GLIBCXX_VISIBILITY(default)
     79 {
     80 _GLIBCXX_BEGIN_NAMESPACE_VERSION
     81   template<typename _Key, typename _Tp, typename _Hash, typename _CPred,
     82 	   typename _Alloc, typename _Predicate>
     83     inline typename unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>::size_type
     84     erase_if(unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
     85 	     _Predicate __pred)
     86     {
     87       _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>&
     88 	__ucont = __cont;
     89       return __detail::__erase_nodes_if(__cont, __ucont, __pred);
     90     }
     91 
     92   template<typename _Key, typename _Tp, typename _Hash, typename _CPred,
     93 	   typename _Alloc, typename _Predicate>
     94     inline typename unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>::
     95 		    size_type
     96     erase_if(unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont,
     97 	     _Predicate __pred)
     98     {
     99       _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>&
    100 	__ucont = __cont;
    101       return __detail::__erase_nodes_if(__cont, __ucont, __pred);
    102     }
    103 _GLIBCXX_END_NAMESPACE_VERSION
    104 } // namespace std
    105 #endif // C++20
    106 
    107 #endif // C++11
    108 
    109 #endif // _GLIBCXX_UNORDERED_MAP
    110