8#ifndef INCLUDED_BSLSTL_UNORDEREDMAP
9#define INCLUDED_BSLSTL_UNORDEREDMAP
1021#include <bslscm_version.h>
1067#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1068# include <initializer_list>
1071#ifdef BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER
1072#include <type_traits>
1073 #ifndef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
1074 #error Rvalue references curiously absent despite native 'type_traits'.
1078#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1079 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1080# define BSLSTL_UNORDEREDMAP_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T) \
1081 requires ::BloombergLP::bslmf::ContainerCompatibleRange<R, T>
1083# define BSLSTL_UNORDEREDMAP_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T)
1086#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1092# define COMPILING_BSLSTL_UNORDEREDMAP_H
1094# undef COMPILING_BSLSTL_UNORDEREDMAP_H
1139 typedef BloombergLP::bslstl::UnorderedMapKeyConfiguration<
const KEY,
1145 typedef BloombergLP::bslstl::HashTable<ListConfiguration,
1148 ALLOCATOR> HashTable;
1152 typedef BloombergLP::bslalg::BidirectionalLink HashTableLink;
1156 typedef typename HashTable::NodeType HashTableNode;
1160 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
1163 template <
class KEY2,
1176 template <
class INPUT_ITERATOR,
class SENTINEL>
1177 void constructFromRange(INPUT_ITERATOR first, SENTINEL last);
1179#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1180 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1188 template <
class INPUT_ITERATOR,
class SENTINEL>
1189 void constructFromRange(INPUT_ITERATOR first,
1191 size_t numElements);
1196 template <
class INPUT_ITERATOR,
class SENTINEL>
1197 void insertFromRange(INPUT_ITERATOR first, SENTINEL last);
1199#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1200 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1207 template <
class INPUT_ITERATOR,
class SENTINEL>
1208 void insertFromRange(INPUT_ITERATOR first,
1210 size_t numElements);
1232 typedef BloombergLP::bslstl::HashTableIterator<
1234 typedef BloombergLP::bslstl::HashTableIterator<
1236 typedef BloombergLP::bslstl::HashTableBucketIterator<
1238 typedef BloombergLP::bslstl::HashTableBucketIterator<
1272 const HASH& hashFunction = HASH(),
1273 const EQUAL& keyEqual = EQUAL(),
1274 const ALLOCATOR& basicAllocator = ALLOCATOR());
1276 const HASH& hashFunction,
1277 const ALLOCATOR& basicAllocator);
1279 const ALLOCATOR& basicAllocator);
1321 template <
class INPUT_ITERATOR>
1323 INPUT_ITERATOR last,
1325 const HASH& hashFunction = HASH(),
1326 const EQUAL& keyEqual = EQUAL(),
1327 const ALLOCATOR& basicAllocator = ALLOCATOR());
1328 template <
class INPUT_ITERATOR>
1330 INPUT_ITERATOR last,
1332 const HASH& hashFunction,
1333 const ALLOCATOR& basicAllocator);
1334 template <
class INPUT_ITERATOR>
1336 INPUT_ITERATOR last,
1338 const ALLOCATOR& basicAllocator);
1339 template <
class INPUT_ITERATOR>
1341 INPUT_ITERATOR last,
1342 const ALLOCATOR& basicAllocator);
1344#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1345# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1347 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
1348 class = bsl::enable_if_t<
1349 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
1350 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1354 std::initializer_list<value_type> values,
1355 size_type initialNumBuckets = 0,
1356 const HASH& hashFunction = HASH(),
1357 const EQUAL& keyEqual = EQUAL(),
1358 const ALLOCATOR& basicAllocator = ALLOCATOR());
1359# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1361 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
1362 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1366 size_type initialNumBuckets,
1367 const HASH& hashFunction,
1368 const ALLOCATOR& basicAllocator);
1369# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1371 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1375 size_type initialNumBuckets,
1376 const ALLOCATOR& basicAllocator);
1377# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
1407 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
1411 const ALLOCATOR& basicAllocator);
1439 template <class RANGE>
1443 BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range,
1444 size_type initialNumBuckets = 0,
1445 const HASH& hashFunction = HASH(),
1446 const EQUAL& keyEqual = EQUAL(),
1447 const ALLOCATOR& basicAllocator = ALLOCATOR())
1448 : d_impl(hashFunction,
1455#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1456 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1457 if constexpr (ranges::sized_range<RANGE>) {
1458 constructFromRange(bsl::ranges::begin(range),
1459 bsl::ranges::end (range),
1460 bsl::ranges::size (range));
1464 constructFromRange(bsl::ranges::begin(range),
1465 bsl::ranges::end (range));
1469 template <
class RANGE>
1474 const HASH& hashFunction,
1475 const ALLOCATOR& basicAllocator)
1476 : d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
1489 template <
class RANGE>
1494 const ALLOCATOR& basicAllocator)
1495 : d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
1508 template <
class RANGE>
1512 const ALLOCATOR& basicAllocator)
1513 : d_impl(HASH(), EQUAL(), 0, 1.0f, basicAllocator)
1542 const typename type_identity<ALLOCATOR>::type& basicAllocator);
1553 BloombergLP::bslmf::MovableRef<unordered_map> original);
1565 BloombergLP::bslmf::MovableRef<unordered_map> original,
1566 const typename type_identity<ALLOCATOR>::type& basicAllocator);
1598 operator=(BloombergLP::bslmf::MovableRef<unordered_map>
rhs)
1600 AllocatorTraits::is_always_equal::value &&
1601 std::is_nothrow_move_assignable<HASH>::value &&
1602 std::is_nothrow_move_assignable<EQUAL>::value);
1604#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1634 BloombergLP::bslmf::MovableRef<key_type> key);
1636#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1649 template <
class LOOKUP_KEY>
1651 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1652 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1677 template <
class LOOKUP_KEY>
1679 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1680 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1682 at(
const LOOKUP_KEY& key) {
1683 HashTableLink *node = d_impl.find(key);
1686 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
1687 "unordered_map<...>::at(LOOKUP_KEY): invalid key value");
1689 return static_cast<HashTableNode *
>(node)->value().second;
1726#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1741 template <
class... Args>
1762 template <
class... Args>
1776 template <
class RANGE>
1781#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1782 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1783 if constexpr (ranges::sized_range<RANGE>) {
1784 insertFromRange(bsl::ranges::begin(range),
1785 bsl::ranges::end (range),
1786 bsl::ranges::size (range));
1790 insertFromRange(bsl::ranges::begin(range),
1791 bsl::ranges::end (range));
1817 template <
class t_KEY>
1819 BloombergLP::bslmf::IsTransparentPredicate<HASH, t_KEY>::value &&
1820 BloombergLP::bslmf::IsTransparentPredicate<EQUAL,t_KEY>::value &&
1855 template <
class LOOKUP_KEY>
1857 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1858 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1888#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1889 template <
class ALT_VALUE_TYPE>
1891#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1892 template <
class ALT_VALUE_TYPE>
1912 template <
class ALT_VALUE_TYPE>
1914 ALT_VALUE_TYPE&&>::value,
1924 bool isInsertedFlag =
false;
1926 HashTableLink *result = d_impl.insertIfMissing(
1930 return ResultType(
iterator(result), isInsertedFlag);
1952#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1953 template <
class ALT_VALUE_TYPE>
1955#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1956 template <
class ALT_VALUE_TYPE>
1979 template <
class ALT_VALUE_TYPE>
1981 ALT_VALUE_TYPE&&>::value,
2000 bool isInsertedFlag;
2002 HashTableLink *result = d_impl.insertIfMissing(
2023 template <
class INPUT_ITERATOR>
2024 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
2026#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
2033 void insert(std::initializer_list<value_type> values);
2036#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2045 template <
class BDE_OTHER_TYPE>
2047 BDE_OTHER_TYPE&& obj);
2057 template <
class BDE_OTHER_TYPE>
2059 BloombergLP::bslmf::MovableRef<KEY> key,
2060 BDE_OTHER_TYPE&& obj);
2072 template<
class LOOKUP_KEY,
class BDE_OTHER_TYPE>
2074 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2075 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2080 bool isInsertedFlag =
false;
2081 HashTableLink *result = d_impl.insertOrAssignTransparent(
2086 return ResultType(
iterator(result), isInsertedFlag);
2099 template <
class BDE_OTHER_TYPE>
2102 BDE_OTHER_TYPE&& obj);
2113 template <
class BDE_OTHER_TYPE>
2115 BloombergLP::bslmf::MovableRef<KEY> key,
2116 BDE_OTHER_TYPE&& obj);
2129 template<
class LOOKUP_KEY,
class BDE_OTHER_TYPE>
2131 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2132 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2136 BDE_OTHER_TYPE&& obj)
2138 bool isInsertedFlag =
false;
2139 HashTableLink *result = d_impl.insertOrAssignTransparent(
2162 template <
class LOOKUP_KEY>
2164 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2165 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2171 HashTableLink *first = d_impl.find(key);
2231 AllocatorTraits::is_always_equal::value &&
2232 bsl::is_nothrow_swappable<HASH>::value &&
2233 bsl::is_nothrow_swappable<EQUAL>::value);
2235#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
2245 template <
class... Args>
2257 template <
class... Args>
2259 BloombergLP::bslmf::MovableRef<KEY> key,
2274 template<
class LOOKUP_KEY,
class... Args>
2276 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2277 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2284 bool isInsertedFlag =
false;
2285 HashTableLink *result = d_impl.tryEmplace(
2291 return ResultType(
iterator(result), isInsertedFlag);
2304 template<
class... Args>
2318 template <
class... Args>
2320 BloombergLP::bslmf::MovableRef<KEY> key,
2335 template<
class LOOKUP_KEY,
class... Args>
2337 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2338 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2342 bool isInsertedFlag =
false;
2343 HashTableLink *result = d_impl.tryEmplace(
2373 template <
class LOOKUP_KEY>
2375 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2376 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2378 at(
const LOOKUP_KEY& key)
const {
2379 HashTableLink *node = d_impl.find(key);
2382 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
2383 "unordered_map<...>::at(LOOKUP_KEY) const: invalid key value");
2385 return static_cast<HashTableNode *
>(node)->value().second;
2434 template <class LOOKUP_KEY>
2436 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2437 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2441 return d_impl.bucketIndexForKey(key);
2472 template <class LOOKUP_KEY>
2474 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2475 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2477 count(const LOOKUP_KEY& key)
const
2479 return d_impl.find(key) != 0;
2497 template <
class LOOKUP_KEY>
2499 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value &&
2500 BloombergLP::bslmf::IsTransparentPredicate<EQUAL,
2526 template <class LOOKUP_KEY>
2528 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2529 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2531 equal_range(const LOOKUP_KEY& key)
const
2535 HashTableLink *first = d_impl.find(key);
2561 template <
class LOOKUP_KEY>
2563 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2564 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2618#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
2630 class INPUT_ITERATOR,
2631 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2633 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2637 class = bsl::enable_if_t<
std::is_invocable_v<HASH, const KEY &>>,
2638 class = bsl::enable_if_t<
2639 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
2640 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2644 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
2647 ALLOCATOR = ALLOCATOR())
2657 class INPUT_ITERATOR,
2661 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2663 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2664 class DEFAULT_ALLOCATOR = bsl::allocator<pair<const KEY, VALUE>>,
2665 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2669 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2683 class INPUT_ITERATOR,
2686 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2688 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2689 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
2690 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2694 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2697->
unordered_map<KEY, VALUE, HASH, bsl::equal_to<KEY>, ALLOCATOR>;
2706 class INPUT_ITERATOR,
2709 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2711 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2712 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2713 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2717 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2729 class INPUT_ITERATOR,
2731 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2733 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2734 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2738 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2740->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2747 class INPUT_ITERATOR,
2749 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2751 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2752 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2753 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2757 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2768 class INPUT_ITERATOR,
2770 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2772 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2773 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2776->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2783 class INPUT_ITERATOR,
2785 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
2787 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
2788 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2789 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2805 class HASH = bsl::hash<KEY>,
2806 class EQUAL = bsl::equal_to<KEY>,
2807 class ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2808 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
2809 class = bsl::enable_if_t<
2810 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
2811 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2813unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2814 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
2817 ALLOCATOR = ALLOCATOR())
2832 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2833 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2835unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2836 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2854 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
2855 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2857unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2858 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2861->
unordered_map<KEY, VALUE, HASH, bsl::equal_to<KEY>, ALLOCATOR>;
2874 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2875 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2877unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2878 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2891 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2893unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2894 typename bsl::allocator_traits<ALLOCATOR>::size_type,
2896->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2906 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2907 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2909unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
2910 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
2924 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
2926unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>, ALLOCATOR)
2927->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
2937 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
2938 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
2940unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>, ALLOC *)
2955template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
2956bool operator==(const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& lhs,
2957 const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& rhs);
2959#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
2960template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
2961bool operator!=(const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& lhs,
2962 const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& rhs);
2985erase_if(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& m,
2986 PREDICATE predicate);
3001template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
3002void swap(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& a,
3003 unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& b)
3018template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3019template <
class INPUT_ITERATOR,
class SENTINEL>
3022 INPUT_ITERATOR first,
3032 if (first == last) {
3037 BloombergLP::bslstl::IteratorUtil::
3038 canCalculateInsertDistance<INPUT_ITERATOR,SENTINEL>()) {
3040 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
3043 bool isInsertedFlag;
3045 while (first != last) {
3046 d_impl.insertIfMissing(&isInsertedFlag, *first);
3051#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
3052 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
3054template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3055template <
class INPUT_ITERATOR,
class SENTINEL>
3058 INPUT_ITERATOR first,
3063 !BloombergLP::bslstl::IteratorUtil
3064 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
3065 || numElements ==
static_cast<size_t>(
3066 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
3068 if (0 < numElements) {
3069 this->reserve(numElements);
3072 bool isInsertedFlag;
3074 while (first != last) {
3075 d_impl.insertIfMissing(&isInsertedFlag, *first);
3083template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3087 const HASH& hashFunction,
3088 const EQUAL& keyEqual,
3089 const ALLOCATOR& basicAllocator)
3090: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3094template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3098 const HASH& hashFunction,
3099 const ALLOCATOR& basicAllocator)
3100: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3104template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3108 const ALLOCATOR& basicAllocator)
3109: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3113template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3116 const ALLOCATOR& basicAllocator)
3117: d_impl(basicAllocator)
3121template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3128template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3129template <
class INPUT_ITERATOR>
3132 INPUT_ITERATOR first,
3133 INPUT_ITERATOR last,
3135 const HASH& hashFunction,
3136 const EQUAL& keyEqual,
3137 const ALLOCATOR& basicAllocator)
3138: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3140 constructFromRange(first, last);
3143template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3144template <
class INPUT_ITERATOR>
3147 INPUT_ITERATOR first,
3148 INPUT_ITERATOR last,
3150 const HASH& hashFunction,
3151 const ALLOCATOR& basicAllocator)
3152: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3154 this->
insert(first, last);
3157template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3158template <
class INPUT_ITERATOR>
3161 INPUT_ITERATOR first,
3162 INPUT_ITERATOR last,
3164 const ALLOCATOR& basicAllocator)
3165: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3167 this->
insert(first, last);
3170template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3171template <
class INPUT_ITERATOR>
3174 INPUT_ITERATOR first,
3175 INPUT_ITERATOR last,
3176 const ALLOCATOR& basicAllocator)
3177: d_impl(basicAllocator)
3179 this->
insert(first, last);
3182#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3183template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3184# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3185template <
class,
class,
class>
3189 std::initializer_list<value_type> values,
3190 size_type initialNumBuckets,
3191 const HASH& hashFunction,
3192 const EQUAL& keyEqual,
3193 const ALLOCATOR& basicAllocator)
3194: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3196 insert(values.begin(), values.end());
3199template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3200# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3201template <
class,
class>
3205 std::initializer_list<value_type> values,
3206 size_type initialNumBuckets,
3207 const HASH& hashFunction,
3208 const ALLOCATOR& basicAllocator)
3209: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3211 insert(values.begin(), values.end());
3214template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3215# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3220 std::initializer_list<value_type> values,
3221 size_type initialNumBuckets,
3222 const ALLOCATOR& basicAllocator)
3223: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3225 insert(values.begin(), values.end());
3228template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3229# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3234 std::initializer_list<value_type> values,
3235 const ALLOCATOR& basicAllocator)
3236: d_impl(basicAllocator)
3238 insert(values.begin(), values.end());
3242template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3246: d_impl(original.d_impl,
3248 original.get_allocator()))
3252template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3256 const typename type_identity<ALLOCATOR>::type& basicAllocator)
3257: d_impl(original.d_impl, basicAllocator)
3261template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3264 BloombergLP::bslmf::MovableRef<unordered_map> original)
3265: d_impl(MoveUtil::access(original).get_allocator())
3272template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3275 BloombergLP::bslmf::MovableRef<unordered_map> original,
3276 const typename type_identity<ALLOCATOR>::type& basicAllocator)
3277: d_impl(MoveUtil::move(MoveUtil::access(original).d_impl), basicAllocator)
3281template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3289template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3298 d_impl =
rhs.d_impl;
3303template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3307 BloombergLP::bslmf::MovableRef<unordered_map>
rhs)
3309 AllocatorTraits::is_always_equal::value &&
3310 std::is_nothrow_move_assignable<HASH>::value &&
3311 std::is_nothrow_move_assignable<EQUAL>::value)
3318 d_impl = MoveUtil::move(lvalue.d_impl);
3323#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3324template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3326unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>&
3328 std::initializer_list<value_type>
rhs)
3330 unordered_map tmp(
rhs.begin(),
rhs.end(), d_impl.allocator());
3338template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3344 HashTableLink *node = d_impl.insertIfMissing(key);
3345 return static_cast<HashTableNode *
>(node)->value().second;
3348template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3352 BloombergLP::bslmf::MovableRef<key_type> key)
3354 HashTableLink *node = d_impl.insertIfMissing(
3355 MoveUtil::move(MoveUtil::access(key)));
3356 return static_cast<HashTableNode *
>(node)->value().second;
3359template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3364 HashTableLink *node = d_impl.
find(key);
3367 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
3368 "unordered_map<...>::at(key_type): invalid key value");
3371 return static_cast<HashTableNode *
>(node)->value().second;
3374template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3380 return iterator(d_impl.elementListRoot());
3383template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3391template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3401template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3411template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3420#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3421template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3422template <
class... Args>
3430 bool isInsertedFlag =
false;
3432 HashTableLink *result = d_impl.emplaceIfMissing(
3436 return ResultType(
iterator(result), isInsertedFlag);
3439template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3440template <
class... Args>
3453 bool isInsertedFlag =
false;
3455 HashTableLink *result = d_impl.emplaceIfMissing(
3463template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3471 return iterator(d_impl.remove(position.node()));
3474template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3482template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3486 HashTableLink *target = d_impl.find(key);
3488 d_impl.remove(target);
3496template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3502#if defined BDE_BUILD_TARGET_SAFE_2
3503 if (first != last) {
3506 for (; it != first; ++it) {
3510 for (; it != last; ++it) {
3516 while (first != last) {
3517 first = this->
erase(first);
3523template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3528 return find(key) !=
end();
3531template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3539template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3548 bool isInsertedFlag =
false;
3550 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag, value);
3552 return ResultType(
iterator(result), isInsertedFlag);
3555template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3562 bool isInsertedFlag;
3564 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag, value);
3569template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3570template <
class INPUT_ITERATOR>
3572 INPUT_ITERATOR first,
3573 INPUT_ITERATOR last)
3575 insertFromRange(first, last);
3578#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3579template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3581 std::initializer_list<value_type> values)
3583 insert(values.begin(), values.end());
3587#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3588template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3589template <
class BDE_OTHER_TYPE>
3594 BDE_OTHER_TYPE&& obj)
3597 bool isInsertedFlag =
false;
3598 HashTableLink *result = d_impl.insertOrAssign(
3603 return ResultType(
iterator(result), isInsertedFlag);
3606template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3607template <
class BDE_OTHER_TYPE>
3611 BloombergLP::bslmf::MovableRef<KEY> key,
3612 BDE_OTHER_TYPE&& obj)
3615 bool isInsertedFlag =
false;
3616 HashTableLink *result = d_impl.insertOrAssign(
3621 return ResultType(
iterator(result), isInsertedFlag);
3624template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3625template <
class BDE_OTHER_TYPE>
3630 BDE_OTHER_TYPE&& obj)
3632 bool isInsertedFlag =
false;
3633 HashTableLink *result = d_impl.insertOrAssign(
3641template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3642template <
class BDE_OTHER_TYPE>
3646 BloombergLP::bslmf::MovableRef<KEY> key,
3647 BDE_OTHER_TYPE&& obj)
3649 bool isInsertedFlag =
false;
3650 HashTableLink *result = d_impl.insertOrAssign(
3659template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3668 HashTableLink *first = d_impl.find(key);
3673template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3677 float newMaxLoadFactor)
3679 d_impl.setMaxLoadFactor(newMaxLoadFactor);
3682template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3688 d_impl.rehashForNumBuckets(numBuckets);
3691template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3697 d_impl.reserveForNumElements(numElements);
3700template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3705 AllocatorTraits::is_always_equal::value &&
3706 bsl::is_nothrow_swappable<HASH>::value &&
3707 bsl::is_nothrow_swappable<EQUAL>::value)
3709 d_impl.swap(other.d_impl);
3712#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
3713template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3714template <
class... Args>
3724 bool isInsertedFlag =
false;
3725 HashTableLink *result = d_impl.tryEmplace(
3731 return ResultType(
iterator(result), isInsertedFlag);
3734template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3735template <
class... Args>
3741 BloombergLP::bslmf::MovableRef<KEY> key,
3745 bool isInsertedFlag =
false;
3746 HashTableLink *result = d_impl.tryEmplace(
3752 return ResultType(
iterator(result), isInsertedFlag);
3755template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3756template <
class... Args>
3764 bool isInsertedFlag =
false;
3765 HashTableLink *result = d_impl.tryEmplace(
3774template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3775template <
class... Args>
3780 BloombergLP::bslmf::MovableRef<KEY> key,
3783 bool isInsertedFlag =
false;
3784 HashTableLink *result = d_impl.tryEmplace(
3794template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3795template <
class INPUT_ITERATOR,
class SENTINEL>
3798 INPUT_ITERATOR first,
3809 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()) {
3810 this->reserve(this->size()
3811 + BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
3814 bool isInsertedFlag;
3816 while (first != last) {
3817 d_impl.insertIfMissing(&isInsertedFlag, *first);
3822#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
3823 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
3825template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3826template <
class INPUT_ITERATOR,
class SENTINEL>
3828void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insertFromRange(
3829 INPUT_ITERATOR first,
3834 !BloombergLP::bslstl::IteratorUtil
3835 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
3836 || numElements ==
static_cast<size_t>(
3837 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
3841 bool isInsertedFlag;
3843 while (first != last) {
3844 d_impl.insertIfMissing(&isInsertedFlag, *first);
3852template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3857 HashTableLink *target = d_impl.find(key);
3859 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
3860 "unordered_map<...>::at(key_type): invalid key value");
3862 return static_cast<HashTableNode *
>(target)->value().second;
3865template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3874template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3883template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3892template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3901template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3912template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3923template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3935template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3946template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3952 return d_impl.bucketIndexForKey(key);
3955template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3961 return d_impl.numBuckets();
3964template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3970 return d_impl.maxNumBuckets();
3973template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3981 return d_impl.countElementsInBucket(index);
3984template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3990 return d_impl.find(key) != 0;
3993template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3999 return 0 == d_impl.size();
4002template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4007 ALLOCATOR>::const_iterator,
4012 ALLOCATOR>::const_iterator>
4018 HashTableLink *first = d_impl.find(key);
4024template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4034template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4040 return d_impl.allocator();
4043template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4047 return d_impl.hasher();
4050template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4054 return d_impl.comparator();
4057template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4063 return d_impl.loadFactor();
4066template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4072 return d_impl.maxLoadFactor();
4075template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4081 return d_impl.size();
4084template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4090 return d_impl.maxSize();
4096template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4098bool bsl::operator==(
4102 return lhs.d_impl == rhs.d_impl;
4105#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
4106template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4125bsl::erase_if(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& m,
4126 PREDICATE predicate)
4128 return BloombergLP::bslstl::AlgorithmUtil::containerEraseIf(m, predicate);
4131template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4156template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4165template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4178template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4180 bsl::unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR> >
4181 : ::BloombergLP::bslmf::IsBitwiseMoveable<BloombergLP::bslstl::HashTable<
4182 ::BloombergLP::bslstl::
4183 UnorderedMapKeyConfiguration<KEY, bsl::pair<const KEY, VALUE> >,
Definition bslma_bslallocator.h:588
Definition bslstl_string.h:1252
Definition bslstl_pair.h:1280
Definition bslstl_unorderedmap.h:1123
unordered_map &operator=(BloombergLP::bslmf::MovableRef< unordered_map > rhs) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits add_lvalue_reference< VALUE >::type operator[](const key_type &key)
Definition bslstl_unorderedmap.h:3341
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, iterator >::type find(const LOOKUP_KEY &key)
Definition bslstl_unorderedmap.h:1860
const_iterator cbegin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3886
size_type erase(const key_type &key)
Definition bslstl_unorderedmap.h:3484
pair< iterator, bool > insert_or_assign(const KEY &key, BDE_OTHER_TYPE &&obj)
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, iterator >::type try_emplace(const_iterator hint, LOOKUP_KEY &&key, Args &&... args)
Definition bslstl_unorderedmap.h:2340
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this unordered map.
Definition bslstl_unorderedmap.h:4078
unordered_map(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3160
~unordered_map()
Destroy this object and each of its elements.
Definition bslstl_unorderedmap.h:3283
iterator insert_or_assign(const_iterator hint, BloombergLP::bslmf::MovableRef< KEY > key, BDE_OTHER_TYPE &&obj)
Definition bslstl_unorderedmap.h:3644
void insert_range(BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range)
Definition bslstl_unorderedmap.h:1778
enable_if< is_convertible< ALT_VALUE_TYPE, value_type >::value, iterator >::type insert(const_iterator hint, BSLS_COMPILERFEATURES_FORWARD_REF(ALT_VALUE_TYPE) value)
Definition bslstl_unorderedmap.h:1984
void insert(INPUT_ITERATOR first, INPUT_ITERATOR last)
Definition bslstl_unorderedmap.h:3571
AllocatorTraits::size_type size_type
Definition bslstl_unorderedmap.h:1227
float load_factor() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4060
friend bool operator==(const unordered_map< KEY2, VALUE2, HASH2, EQUAL2, ALLOCATOR2 > &, const unordered_map< KEY2, VALUE2, HASH2, EQUAL2, ALLOCATOR2 > &)
pair< iterator, bool > try_emplace(BloombergLP::bslmf::MovableRef< KEY > key, Args &&... args)
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3386
unordered_map(size_type initialNumBuckets, const HASH &hashFunction=HASH(), const EQUAL &keyEqual=EQUAL(), const ALLOCATOR &basicAllocator=ALLOCATOR())
Definition bslstl_unorderedmap.h:3086
AllocatorTraits::pointer pointer
Definition bslstl_unorderedmap.h:1229
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, pair< iterator, bool > >::type insert_or_assign(LOOKUP_KEY &&key, BDE_OTHER_TYPE &&obj)
Definition bslstl_unorderedmap.h:2077
unordered_map(BloombergLP::bslmf::MovableRef< unordered_map > original, const typename type_identity< ALLOCATOR >::type &basicAllocator)
Definition bslstl_unorderedmap.h:3274
value_type & reference
Definition bslstl_unorderedmap.h:1224
const_iterator begin() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3868
unordered_map(BloombergLP::bslmf::MovableRef< unordered_map > original)
Definition bslstl_unorderedmap.h:3263
EQUAL key_equal
Definition bslstl_unorderedmap.h:1221
pair< iterator, iterator > equal_range(const key_type &key)
Definition bslstl_unorderedmap.h:3663
AllocatorTraits::const_pointer const_pointer
Definition bslstl_unorderedmap.h:1230
iterator erase(iterator position)
Definition bslstl_unorderedmap.h:3477
void max_load_factor(float newMaxLoadFactor)
Definition bslstl_unorderedmap.h:3676
pair< const_iterator, const_iterator > equal_range(const key_type &key) const
Definition bslstl_unorderedmap.h:4013
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, typenameadd_lvalue_reference< VALUE >::type >::type at(const LOOKUP_KEY &key)
Definition bslstl_unorderedmap.h:1682
ALLOCATOR allocator_type
Definition bslstl_unorderedmap.h:1222
unordered_map(const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3115
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition bslstl_unorderedmap.h:3442
unordered_map(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets, const HASH &hashFunction, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3146
size_type bucket(const key_type &key) const
Definition bslstl_unorderedmap.h:3949
unordered_map(size_type initialNumBuckets, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3106
void rehash(size_type numBuckets)
Definition bslstl_unorderedmap.h:3685
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, pair< iterator, iterator > >::type equal_range(const LOOKUP_KEY &key)
Definition bslstl_unorderedmap.h:2167
iterator find(const key_type &key)
Definition bslstl_unorderedmap.h:3534
HASH hash_function() const
Definition bslstl_unorderedmap.h:4045
enable_if< is_convertible< ALT_VALUE_TYPE, value_type >::value, pair< iterator, bool > >::type insert(BSLS_COMPILERFEATURES_FORWARD_REF(ALT_VALUE_TYPE) value)
Definition bslstl_unorderedmap.h:1917
iterator insert_or_assign(const_iterator hint, const KEY &key, BDE_OTHER_TYPE &&obj)
Definition bslstl_unorderedmap.h:3627
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, bool >::type contains(const LOOKUP_KEY &key) const
Definition bslstl_unorderedmap.h:2503
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4037
pair< iterator, bool > insert_or_assign(BloombergLP::bslmf::MovableRef< KEY > key, BDE_OTHER_TYPE &&obj)
HASH hasher
Definition bslstl_unorderedmap.h:1220
size_type count(const key_type &key) const
Definition bslstl_unorderedmap.h:3987
BloombergLP::bslstl::HashTableBucketIterator< value_type, difference_type > local_iterator
Definition bslstl_unorderedmap.h:1237
void reserve(size_type numElements)
Definition bslstl_unorderedmap.h:3694
iterator try_emplace(const_iterator hint, const KEY &key, Args &&... args)
unordered_map(size_type initialNumBuckets, const HASH &hashFunction, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3096
pair< iterator, bool > insert(const value_type &value)
Definition bslstl_unorderedmap.h:3543
iterator erase(const_iterator position)
Definition bslstl_unorderedmap.h:3466
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, typenameadd_lvalue_reference< constVALUE >::type >::type at(const LOOKUP_KEY &key) const
Definition bslstl_unorderedmap.h:2378
EQUAL key_eq() const
Definition bslstl_unorderedmap.h:4052
add_lvalue_reference< VALUE >::type operator[](BloombergLP::bslmf::MovableRef< key_type > key)
Definition bslstl_unorderedmap.h:3351
pair< iterator, bool > emplace(Args &&... args)
const value_type & const_reference
Definition bslstl_unorderedmap.h:1225
const_iterator find(const key_type &key) const
Definition bslstl_unorderedmap.h:4028
unordered_map(INPUT_ITERATOR first, INPUT_ITERATOR last, size_type initialNumBuckets=0, const HASH &hashFunction=HASH(), const EQUAL &keyEqual=EQUAL(), const ALLOCATOR &basicAllocator=ALLOCATOR())
Definition bslstl_unorderedmap.h:3131
size_type max_size() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4087
BloombergLP::bslstl::HashTableBucketIterator< const value_type, difference_type > const_local_iterator
Definition bslstl_unorderedmap.h:1239
unordered_map(const unordered_map &original)
Definition bslstl_unorderedmap.h:3244
const_iterator cend() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3895
void clear() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3414
unordered_map()
Definition bslstl_unorderedmap.h:3123
float max_load_factor() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4069
unordered_map & operator=(const unordered_map &rhs)
Definition bslstl_unorderedmap.h:3292
BloombergLP::bslstl::HashTableIterator< value_type, difference_type > iterator
Definition bslstl_unorderedmap.h:1233
AllocatorTraits::difference_type difference_type
Definition bslstl_unorderedmap.h:1228
bsl::pair< const KEY, VALUE > value_type
Definition bslstl_unorderedmap.h:1219
size_type max_bucket_count() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3967
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, size_type >::type count(const LOOKUP_KEY &key) const
Definition bslstl_unorderedmap.h:2477
iterator insert(const_iterator hint, const value_type &value)
Definition bslstl_unorderedmap.h:3558
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, t_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, t_KEY >::value &&!is_convertible< BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY), iterator >::value &&!is_convertible< BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY), const_iterator >::value, size_type >::type erase(BSLS_COMPILERFEATURES_FORWARD_REF(t_KEY) key)
Definition bslstl_unorderedmap.h:1825
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value &&!bsl::is_convertible< LOOKUP_KEY &&, const_iterator >::value &&!bsl::is_convertible< LOOKUP_KEY &&, iterator >::value, pair< iterator, bool > >::type try_emplace(LOOKUP_KEY &&key, Args &&... args)
Definition bslstl_unorderedmap.h:2281
KEY key_type
Definition bslstl_unorderedmap.h:1217
add_lvalue_reference< VALUE >::type at(const key_type &key)
Definition bslstl_unorderedmap.h:3362
unordered_map(INPUT_ITERATOR first, INPUT_ITERATOR last, const ALLOCATOR &basicAllocator)
Definition bslstl_unorderedmap.h:3173
VALUE mapped_type
Definition bslstl_unorderedmap.h:1218
bsl::enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, iterator >::type insert_or_assign(const_iterator hint, LOOKUP_KEY &&key, BDE_OTHER_TYPE &&obj)
Definition bslstl_unorderedmap.h:2134
size_type bucket_count() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3958
void swap(unordered_map &other) BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(AllocatorTraits pair< iterator, bool > try_emplace(const KEY &key, Args &&... args)
Definition bslstl_unorderedmap.h:2246
enable_if< BloombergLP::bslmf::IsTransparentPredicate< HASH, LOOKUP_KEY >::value &&BloombergLP::bslmf::IsTransparentPredicate< EQUAL, LOOKUP_KEY >::value, const_iterator >::type find(const LOOKUP_KEY &key) const
Definition bslstl_unorderedmap.h:2566
bool contains(const key_type &key) const
Definition bslstl_unorderedmap.h:3525
add_lvalue_reference< constVALUE >::type at(const key_type &key) const
Definition bslstl_unorderedmap.h:3854
iterator try_emplace(const_iterator hint, BloombergLP::bslmf::MovableRef< KEY > key, Args &&... args)
unordered_map(const unordered_map &original, const typename type_identity< ALLOCATOR >::type &basicAllocator)
Definition bslstl_unorderedmap.h:3254
iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3377
iterator erase(const_iterator first, const_iterator last)
Definition bslstl_unorderedmap.h:3498
BloombergLP::bslstl::HashTableIterator< const value_type, difference_type > const_iterator
Definition bslstl_unorderedmap.h:1235
bool empty() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3996
size_type bucket_size(size_type index) const
Definition bslstl_unorderedmap.h:3976
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_ASSERT_SAFE(X)
Definition bsls_assert.h:1917
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR_CPP17
Definition bsls_keyword.h:639
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_KEYWORD_NOEXCEPT_SPECIFICATION(...)
Definition bsls_keyword.h:676
#define BSLSTL_UNORDEREDMAP_REQUIRES_CONTAINER_COMPATIBLE_RANGE(R, T)
Definition bslstl_unorderedmap.h:1083
bsl::size_t size(const TYPE &array)
Return the number of elements in the specified array.
int reserve(TYPE *array, int numElements)
Definition bdlat_valuetypefunctions.h:939
void swap(array< VALUE_TYPE, SIZE > &lhs, array< VALUE_TYPE, SIZE > &rhs)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
deque< VALUE_TYPE, ALLOCATOR >::size_type erase(deque< VALUE_TYPE, ALLOCATOR > &deq, const BDE_OTHER_TYPE &value)
Definition bslstl_deque.h:4424
T::iterator begin(T &container)
Definition bslstl_iterator.h:1593
const from_range_t from_range
ALLOCATOR & lhs
Definition bslstl_string.h:3917
T::iterator end(T &container)
Definition bslstl_iterator.h:1621
deque< VALUE_TYPE, ALLOCATOR >::size_type erase_if(deque< VALUE_TYPE, ALLOCATOR > &deq, PREDICATE predicate)
Definition bslstl_deque.h:4433
bool operator!=(const memory_resource &a, const memory_resource &b)
Definition bdlc_flathashmap.h:2218
Definition baljsn_encoder_testtypes.h:76
Definition bdlbb_blob.h:579
Definition bdldfp_decimal.h:5549
t_TYPE & type
This typedef defines the return type of this meta function.
Definition bslmf_addlvaluereference.h:131
Definition bslma_allocatortraits.h:1089
BloombergLP::bslma::AllocatorTraits_ConstPointerType< ALLOCATOR >::type const_pointer
Definition bslma_allocatortraits.h:1183
BloombergLP::bslma::AllocatorTraits_SizeType< ALLOCATOR >::type size_type
Definition bslma_allocatortraits.h:1196
BloombergLP::bslma::AllocatorTraits_PointerType< ALLOCATOR >::type pointer
Definition bslma_allocatortraits.h:1180
BloombergLP::bslma::AllocatorTraits_DifferenceType< ALLOCATOR >::type difference_type
Definition bslma_allocatortraits.h:1193
Definition bslmf_enableif.h:530
Definition bslstl_equalto.h:316
Definition bslstl_ranges.h:301
Definition bslstl_hash.h:495
Definition bslmf_isconvertible.h:875
Definition bslalg_hasstliterators.h:99
Definition bslma_usesbslmaallocator.h:344
Definition bslmf_isbitwisemoveable.h:718