14fee23f9Smrg// <unordered_map> -*- C++ -*- 24fee23f9Smrg 3*b1e83836Smrg// Copyright (C) 2007-2022 Free Software Foundation, Inc. 44fee23f9Smrg// 54fee23f9Smrg// This file is part of the GNU ISO C++ Library. This library is free 64fee23f9Smrg// software; you can redistribute it and/or modify it under the 74fee23f9Smrg// terms of the GNU General Public License as published by the 84fee23f9Smrg// Free Software Foundation; either version 3, or (at your option) 94fee23f9Smrg// any later version. 104fee23f9Smrg 114fee23f9Smrg// This library is distributed in the hope that it will be useful, 124fee23f9Smrg// but WITHOUT ANY WARRANTY; without even the implied warranty of 134fee23f9Smrg// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 144fee23f9Smrg// GNU General Public License for more details. 154fee23f9Smrg 164fee23f9Smrg// Under Section 7 of GPL version 3, you are granted additional 174fee23f9Smrg// permissions described in the GCC Runtime Library Exception, version 184fee23f9Smrg// 3.1, as published by the Free Software Foundation. 194fee23f9Smrg 204fee23f9Smrg// You should have received a copy of the GNU General Public License and 214fee23f9Smrg// a copy of the GCC Runtime Library Exception along with this program; 224fee23f9Smrg// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 234fee23f9Smrg// <http://www.gnu.org/licenses/>. 244fee23f9Smrg 254fee23f9Smrg/** @file include/unordered_map 264fee23f9Smrg * This is a Standard C++ Library header. 274fee23f9Smrg */ 284fee23f9Smrg 294fee23f9Smrg#ifndef _GLIBCXX_UNORDERED_MAP 304fee23f9Smrg#define _GLIBCXX_UNORDERED_MAP 1 314fee23f9Smrg 324fee23f9Smrg#pragma GCC system_header 334fee23f9Smrg 3448fb7bfaSmrg#if __cplusplus < 201103L 354fee23f9Smrg# include <bits/c++0x_warning.h> 364fee23f9Smrg#else 374fee23f9Smrg 384fee23f9Smrg#include <type_traits> 394fee23f9Smrg#include <initializer_list> 404fee23f9Smrg#include <bits/allocator.h> 414d5abbe8Smrg#include <ext/alloc_traits.h> 424d5abbe8Smrg#include <ext/aligned_buffer.h> 43a3e9eb18Smrg#include <bits/stl_pair.h> 444fee23f9Smrg#include <bits/stl_function.h> // equal_to, _Identity, _Select1st 454fee23f9Smrg#include <bits/functional_hash.h> 464fee23f9Smrg#include <bits/hashtable.h> 474fee23f9Smrg#include <bits/unordered_map.h> 4848fb7bfaSmrg#include <bits/range_access.h> 49181254a7Smrg#include <bits/erase_if.h> 504fee23f9Smrg 514fee23f9Smrg#ifdef _GLIBCXX_DEBUG 524fee23f9Smrg# include <debug/unordered_map> 534fee23f9Smrg#endif 544fee23f9Smrg 55181254a7Smrg#if __cplusplus >= 201703L 56181254a7Smrgnamespace std _GLIBCXX_VISIBILITY(default) 57181254a7Smrg{ 58181254a7Smrg_GLIBCXX_BEGIN_NAMESPACE_VERSION 59181254a7Smrg namespace pmr 60181254a7Smrg { 61181254a7Smrg template<typename _Tp> class polymorphic_allocator; 62181254a7Smrg template<typename _Key, typename _Tp, typename _Hash = std::hash<_Key>, 63181254a7Smrg typename _Pred = std::equal_to<_Key>> 64181254a7Smrg using unordered_map 65181254a7Smrg = std::unordered_map<_Key, _Tp, _Hash, _Pred, 66181254a7Smrg polymorphic_allocator<pair<const _Key, _Tp>>>; 67181254a7Smrg template<typename _Key, typename _Tp, typename _Hash = std::hash<_Key>, 68181254a7Smrg typename _Pred = std::equal_to<_Key>> 69181254a7Smrg using unordered_multimap 70181254a7Smrg = std::unordered_multimap<_Key, _Tp, _Hash, _Pred, 71181254a7Smrg polymorphic_allocator<pair<const _Key, _Tp>>>; 72181254a7Smrg } // namespace pmr 73181254a7Smrg_GLIBCXX_END_NAMESPACE_VERSION 74181254a7Smrg} // namespace std 75181254a7Smrg#endif // C++17 76181254a7Smrg 77181254a7Smrg#if __cplusplus > 201703L 78181254a7Smrgnamespace std _GLIBCXX_VISIBILITY(default) 79181254a7Smrg{ 80181254a7Smrg_GLIBCXX_BEGIN_NAMESPACE_VERSION 81181254a7Smrg template<typename _Key, typename _Tp, typename _Hash, typename _CPred, 82181254a7Smrg typename _Alloc, typename _Predicate> 83181254a7Smrg inline typename unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>::size_type 84181254a7Smrg erase_if(unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont, 85181254a7Smrg _Predicate __pred) 86*b1e83836Smrg { 87*b1e83836Smrg _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _CPred, _Alloc>& 88*b1e83836Smrg __ucont = __cont; 89*b1e83836Smrg return __detail::__erase_nodes_if(__cont, __ucont, __pred); 90*b1e83836Smrg } 91181254a7Smrg 92181254a7Smrg template<typename _Key, typename _Tp, typename _Hash, typename _CPred, 93181254a7Smrg typename _Alloc, typename _Predicate> 94181254a7Smrg inline typename unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>:: 95181254a7Smrg size_type 96181254a7Smrg erase_if(unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& __cont, 97181254a7Smrg _Predicate __pred) 98*b1e83836Smrg { 99*b1e83836Smrg _GLIBCXX_STD_C::unordered_multimap<_Key, _Tp, _Hash, _CPred, _Alloc>& 100*b1e83836Smrg __ucont = __cont; 101*b1e83836Smrg return __detail::__erase_nodes_if(__cont, __ucont, __pred); 102*b1e83836Smrg } 103181254a7Smrg_GLIBCXX_END_NAMESPACE_VERSION 104181254a7Smrg} // namespace std 105181254a7Smrg#endif // C++20 106181254a7Smrg 10748fb7bfaSmrg#endif // C++11 1084fee23f9Smrg 1094fee23f9Smrg#endif // _GLIBCXX_UNORDERED_MAP 110