11#ifndef INCLUDED_BSLSTL_UNORDEREDMAP_CPP03
12#define INCLUDED_BSLSTL_UNORDEREDMAP_CPP03
63#ifdef COMPILING_BSLSTL_UNORDEREDMAP_H
105 typedef BloombergLP::bslstl::UnorderedMapKeyConfiguration<
const KEY,
111 typedef BloombergLP::bslstl::HashTable<ListConfiguration,
114 ALLOCATOR> HashTable;
118 typedef BloombergLP::bslalg::BidirectionalLink HashTableLink;
122 typedef typename HashTable::NodeType HashTableNode;
126 typedef BloombergLP::bslmf::MovableRefUtil MoveUtil;
129 template <
class KEY2,
135 const unordered_map<KEY2, VALUE2, HASH2, EQUAL2, ALLOCATOR2>&,
136 const unordered_map<KEY2, VALUE2, HASH2, EQUAL2, ALLOCATOR2>&);
142 template <
class INPUT_ITERATOR,
class SENTINEL>
143 void constructFromRange(INPUT_ITERATOR first, SENTINEL last);
145#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
146 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
154 template <
class INPUT_ITERATOR,
class SENTINEL>
155 void constructFromRange(INPUT_ITERATOR first,
162 template <
class INPUT_ITERATOR,
class SENTINEL>
163 void insertFromRange(INPUT_ITERATOR first, SENTINEL last);
165#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
166 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
173 template <
class INPUT_ITERATOR,
class SENTINEL>
174 void insertFromRange(INPUT_ITERATOR first,
198 typedef BloombergLP::bslstl::HashTableIterator<
200 typedef BloombergLP::bslstl::HashTableIterator<
202 typedef BloombergLP::bslstl::HashTableBucketIterator<
204 typedef BloombergLP::bslstl::HashTableBucketIterator<
238 const HASH& hashFunction = HASH(),
239 const EQUAL& keyEqual = EQUAL(),
240 const ALLOCATOR& basicAllocator = ALLOCATOR());
242 const HASH& hashFunction,
243 const ALLOCATOR& basicAllocator);
245 const ALLOCATOR& basicAllocator);
287 template <
class INPUT_ITERATOR>
291 const HASH& hashFunction = HASH(),
292 const EQUAL& keyEqual = EQUAL(),
293 const ALLOCATOR& basicAllocator = ALLOCATOR());
294 template <
class INPUT_ITERATOR>
298 const HASH& hashFunction,
299 const ALLOCATOR& basicAllocator);
300 template <
class INPUT_ITERATOR>
304 const ALLOCATOR& basicAllocator);
305 template <
class INPUT_ITERATOR>
308 const ALLOCATOR& basicAllocator);
310#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
311# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
313 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
314 class = bsl::enable_if_t<
315 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
316 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
320 std::initializer_list<value_type> values,
321 size_type initialNumBuckets = 0,
322 const HASH& hashFunction = HASH(),
323 const EQUAL& keyEqual = EQUAL(),
324 const ALLOCATOR& basicAllocator = ALLOCATOR());
325# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
327 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
328 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
332 size_type initialNumBuckets,
333 const HASH& hashFunction,
334 const ALLOCATOR& basicAllocator);
335# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
337 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
341 size_type initialNumBuckets,
342 const ALLOCATOR& basicAllocator);
343# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
373 class = bsl::enable_if_t< bsl::IsStdAllocator_v<ALLOCATOR>>
377 const ALLOCATOR& basicAllocator);
405 template <class RANGE>
409 BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range,
410 size_type initialNumBuckets = 0,
411 const HASH& hashFunction = HASH(),
412 const EQUAL& keyEqual = EQUAL(),
413 const ALLOCATOR& basicAllocator = ALLOCATOR())
414 : d_impl(hashFunction,
421#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
422 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
423 if constexpr (ranges::sized_range<RANGE>) {
424 constructFromRange(bsl::ranges::begin(range),
425 bsl::ranges::end (range),
426 bsl::ranges::size (range));
430 constructFromRange(bsl::ranges::begin(range),
431 bsl::ranges::end (range));
435 template <
class RANGE>
440 const HASH& hashFunction,
441 const ALLOCATOR& basicAllocator)
442 : d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
455 template <
class RANGE>
460 const ALLOCATOR& basicAllocator)
461 : d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
474 template <
class RANGE>
478 const ALLOCATOR& basicAllocator)
479 : d_impl(HASH(), EQUAL(), 0, 1.0f, basicAllocator)
508 const typename type_identity<ALLOCATOR>::type& basicAllocator);
519 BloombergLP::bslmf::MovableRef<unordered_map> original);
531 BloombergLP::bslmf::MovableRef<unordered_map> original,
532 const typename type_identity<ALLOCATOR>::type& basicAllocator);
564 operator=(BloombergLP::bslmf::MovableRef<unordered_map>
rhs)
566 AllocatorTraits::is_always_equal::value &&
567 std::is_nothrow_move_assignable<HASH>::value &&
568 std::is_nothrow_move_assignable<EQUAL>::value);
570#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
600 BloombergLP::bslmf::MovableRef<key_type> key);
605 template <
class LOOKUP_KEY>
607 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
608 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
633 template <
class LOOKUP_KEY>
635 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
636 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
638 at(
const LOOKUP_KEY& key) {
639 HashTableLink *node = d_impl.find(key);
642 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
643 "unordered_map<...>::at(LOOKUP_KEY): invalid key value");
645 return static_cast<HashTableNode *
>(node)->value().second;
682#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
685#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
686#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT 10
688#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B
689#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
691#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 0
696#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 1
697 template <
class Args_01>
702#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 2
703 template <
class Args_01,
710#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 3
711 template <
class Args_01,
720#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 4
721 template <
class Args_01,
732#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 5
733 template <
class Args_01,
746#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 6
747 template <
class Args_01,
762#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 7
763 template <
class Args_01,
780#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 8
781 template <
class Args_01,
800#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 9
801 template <
class Args_01,
822#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 10
823 template <
class Args_01,
847#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 0
851#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 1
852 template <
class Args_01>
857#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 2
858 template <
class Args_01,
865#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 3
866 template <
class Args_01,
875#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 4
876 template <
class Args_01,
887#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 5
888 template <
class Args_01,
901#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 6
902 template <
class Args_01,
917#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 7
918 template <
class Args_01,
935#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 8
936 template <
class Args_01,
955#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 9
956 template <
class Args_01,
977#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_B >= 10
978 template <
class Args_01,
1004 template <
class... Args>
1008 template <
class... Args>
1024 template <
class RANGE>
1029#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
1030 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
1031 if constexpr (ranges::sized_range<RANGE>) {
1032 insertFromRange(bsl::ranges::begin(range),
1033 bsl::ranges::end (range),
1034 bsl::ranges::size (range));
1038 insertFromRange(bsl::ranges::begin(range),
1039 bsl::ranges::end (range));
1065 template <
class t_KEY>
1067 BloombergLP::bslmf::IsTransparentPredicate<HASH, t_KEY>::value &&
1068 BloombergLP::bslmf::IsTransparentPredicate<EQUAL,t_KEY>::value &&
1103 template <
class LOOKUP_KEY>
1105 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1106 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1108 find(
const LOOKUP_KEY& key)
1136#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1137 template <
class ALT_VALUE_TYPE>
1138 pair<iterator, bool>
1139#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1140 template <
class ALT_VALUE_TYPE>
1141 typename enable_if<is_convertible<ALT_VALUE_TYPE, value_type>::value,
1142 pair<iterator, bool> >::type
1160 template <
class ALT_VALUE_TYPE>
1161 typename enable_if<std::is_constructible<
value_type,
1162 ALT_VALUE_TYPE&&>::value,
1163 pair<iterator, bool> >::type
1172 bool isInsertedFlag =
false;
1174 HashTableLink *result = d_impl.insertIfMissing(
1178 return ResultType(
iterator(result), isInsertedFlag);
1200#if defined(BSLS_PLATFORM_CMP_SUN) && BSLS_PLATFORM_CMP_VERSION < 0x5130
1201 template <
class ALT_VALUE_TYPE>
1203#elif !defined(BSLS_COMPILERFEATURES_SUPPORT_TRAITS_HEADER)
1204 template <
class ALT_VALUE_TYPE>
1205 typename enable_if<is_convertible<ALT_VALUE_TYPE, value_type>::value,
1227 template <
class ALT_VALUE_TYPE>
1228 typename enable_if<std::is_constructible<
value_type,
1229 ALT_VALUE_TYPE&&>::value,
1248 bool isInsertedFlag;
1250 HashTableLink *result = d_impl.insertIfMissing(
1271 template <
class INPUT_ITERATOR>
1272 void insert(INPUT_ITERATOR first, INPUT_ITERATOR last);
1274#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
1281 void insert(std::initializer_list<value_type> values);
1287 template <
class BDE_OTHER_TYPE>
1291 template <
class BDE_OTHER_TYPE>
1293 BloombergLP::bslmf::MovableRef<KEY> key,
1296 template<
class LOOKUP_KEY,
class BDE_OTHER_TYPE>
1298 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1299 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1300 , pair<iterator, bool> >::type
1305 bool isInsertedFlag =
false;
1306 HashTableLink *result = d_impl.insertOrAssignTransparent(
1311 return ResultType(
iterator(result), isInsertedFlag);
1314 template <
class BDE_OTHER_TYPE>
1319 template <
class BDE_OTHER_TYPE>
1321 BloombergLP::bslmf::MovableRef<KEY> key,
1324 template<
class LOOKUP_KEY,
class BDE_OTHER_TYPE>
1326 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1327 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1333 bool isInsertedFlag =
false;
1334 HashTableLink *result = d_impl.insertOrAssignTransparent(
1357 template <
class LOOKUP_KEY>
1359 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1360 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
1361 pair<iterator, iterator> >::type
1366 HashTableLink *first = d_impl.find(key);
1426 AllocatorTraits::is_always_equal::value &&
1427 bsl::is_nothrow_swappable<HASH>::value &&
1428 bsl::is_nothrow_swappable<EQUAL>::value);
1430#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
1433#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
1434#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT 10
1436#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D
1437#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
1439#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
1443#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
1444 template <
class Args_01>
1449#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
1450 template <
class Args_01,
1457#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
1458 template <
class Args_01,
1467#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
1468 template <
class Args_01,
1479#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
1480 template <
class Args_01,
1493#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
1494 template <
class Args_01,
1509#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
1510 template <
class Args_01,
1527#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
1528 template <
class Args_01,
1547#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
1548 template <
class Args_01,
1569#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
1570 template <
class Args_01,
1594#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
1596 BloombergLP::bslmf::MovableRef<KEY> key);
1599#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
1600 template <
class Args_01>
1602 BloombergLP::bslmf::MovableRef<KEY> key,
1606#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
1607 template <
class Args_01,
1610 BloombergLP::bslmf::MovableRef<KEY> key,
1615#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
1616 template <
class Args_01,
1620 BloombergLP::bslmf::MovableRef<KEY> key,
1626#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
1627 template <
class Args_01,
1632 BloombergLP::bslmf::MovableRef<KEY> key,
1639#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
1640 template <
class Args_01,
1646 BloombergLP::bslmf::MovableRef<KEY> key,
1654#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
1655 template <
class Args_01,
1662 BloombergLP::bslmf::MovableRef<KEY> key,
1671#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
1672 template <
class Args_01,
1680 BloombergLP::bslmf::MovableRef<KEY> key,
1690#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
1691 template <
class Args_01,
1700 BloombergLP::bslmf::MovableRef<KEY> key,
1711#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
1712 template <
class Args_01,
1722 BloombergLP::bslmf::MovableRef<KEY> key,
1734#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
1735 template <
class Args_01,
1746 BloombergLP::bslmf::MovableRef<KEY> key,
1760#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
1761 template<
class LOOKUP_KEY>
1763 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1764 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1769 pair<iterator, bool> >::type
1773 bool isInsertedFlag =
false;
1774 HashTableLink *result = d_impl.tryEmplace(
1779 return ResultType(
iterator(result), isInsertedFlag);
1783#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
1784 template<
class LOOKUP_KEY,
class Args_01>
1786 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1787 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1792 pair<iterator, bool> >::type
1797 bool isInsertedFlag =
false;
1798 HashTableLink *result = d_impl.tryEmplace(
1804 return ResultType(
iterator(result), isInsertedFlag);
1808#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
1809 template<
class LOOKUP_KEY,
class Args_01,
1812 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1813 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1818 pair<iterator, bool> >::type
1824 bool isInsertedFlag =
false;
1825 HashTableLink *result = d_impl.tryEmplace(
1832 return ResultType(
iterator(result), isInsertedFlag);
1836#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
1837 template<
class LOOKUP_KEY,
class Args_01,
1841 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1842 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1847 pair<iterator, bool> >::type
1854 bool isInsertedFlag =
false;
1855 HashTableLink *result = d_impl.tryEmplace(
1863 return ResultType(
iterator(result), isInsertedFlag);
1867#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
1868 template<
class LOOKUP_KEY,
class Args_01,
1873 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1874 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1879 pair<iterator, bool> >::type
1887 bool isInsertedFlag =
false;
1888 HashTableLink *result = d_impl.tryEmplace(
1897 return ResultType(
iterator(result), isInsertedFlag);
1901#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
1902 template<
class LOOKUP_KEY,
class Args_01,
1908 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1909 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1914 pair<iterator, bool> >::type
1923 bool isInsertedFlag =
false;
1924 HashTableLink *result = d_impl.tryEmplace(
1934 return ResultType(
iterator(result), isInsertedFlag);
1938#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
1939 template<
class LOOKUP_KEY,
class Args_01,
1946 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1947 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1952 pair<iterator, bool> >::type
1962 bool isInsertedFlag =
false;
1963 HashTableLink *result = d_impl.tryEmplace(
1974 return ResultType(
iterator(result), isInsertedFlag);
1978#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
1979 template<
class LOOKUP_KEY,
class Args_01,
1987 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
1988 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
1993 pair<iterator, bool> >::type
2004 bool isInsertedFlag =
false;
2005 HashTableLink *result = d_impl.tryEmplace(
2017 return ResultType(
iterator(result), isInsertedFlag);
2021#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
2022 template<
class LOOKUP_KEY,
class Args_01,
2031 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2032 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2037 pair<iterator, bool> >::type
2049 bool isInsertedFlag =
false;
2050 HashTableLink *result = d_impl.tryEmplace(
2063 return ResultType(
iterator(result), isInsertedFlag);
2067#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
2068 template<
class LOOKUP_KEY,
class Args_01,
2078 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2079 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2084 pair<iterator, bool> >::type
2097 bool isInsertedFlag =
false;
2098 HashTableLink *result = d_impl.tryEmplace(
2112 return ResultType(
iterator(result), isInsertedFlag);
2116#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
2117 template<
class LOOKUP_KEY,
class Args_01,
2128 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2129 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2134 pair<iterator, bool> >::type
2148 bool isInsertedFlag =
false;
2149 HashTableLink *result = d_impl.tryEmplace(
2164 return ResultType(
iterator(result), isInsertedFlag);
2169#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
2174#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
2175 template<
class Args_01>
2181#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
2182 template<
class Args_01,
2190#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
2191 template<
class Args_01,
2201#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
2202 template<
class Args_01,
2214#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
2215 template<
class Args_01,
2229#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
2230 template<
class Args_01,
2246#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
2247 template<
class Args_01,
2265#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
2266 template<
class Args_01,
2286#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
2287 template<
class Args_01,
2309#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
2310 template<
class Args_01,
2335#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
2337 BloombergLP::bslmf::MovableRef<KEY> key);
2340#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
2341 template <
class Args_01>
2343 BloombergLP::bslmf::MovableRef<KEY> key,
2347#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
2348 template <
class Args_01,
2351 BloombergLP::bslmf::MovableRef<KEY> key,
2356#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
2357 template <
class Args_01,
2361 BloombergLP::bslmf::MovableRef<KEY> key,
2367#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
2368 template <
class Args_01,
2373 BloombergLP::bslmf::MovableRef<KEY> key,
2380#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
2381 template <
class Args_01,
2387 BloombergLP::bslmf::MovableRef<KEY> key,
2395#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
2396 template <
class Args_01,
2403 BloombergLP::bslmf::MovableRef<KEY> key,
2412#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
2413 template <
class Args_01,
2421 BloombergLP::bslmf::MovableRef<KEY> key,
2431#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
2432 template <
class Args_01,
2441 BloombergLP::bslmf::MovableRef<KEY> key,
2452#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
2453 template <
class Args_01,
2463 BloombergLP::bslmf::MovableRef<KEY> key,
2475#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
2476 template <
class Args_01,
2487 BloombergLP::bslmf::MovableRef<KEY> key,
2501#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 0
2502 template<
class LOOKUP_KEY>
2504 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2505 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2510 bool isInsertedFlag =
false;
2511 HashTableLink *result = d_impl.tryEmplace(
2520#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 1
2521 template<
class LOOKUP_KEY,
class Args_01>
2523 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2524 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2530 bool isInsertedFlag =
false;
2531 HashTableLink *result = d_impl.tryEmplace(
2541#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 2
2542 template<
class LOOKUP_KEY,
class Args_01,
2545 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2546 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2553 bool isInsertedFlag =
false;
2554 HashTableLink *result = d_impl.tryEmplace(
2565#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 3
2566 template<
class LOOKUP_KEY,
class Args_01,
2570 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2571 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2579 bool isInsertedFlag =
false;
2580 HashTableLink *result = d_impl.tryEmplace(
2592#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 4
2593 template<
class LOOKUP_KEY,
class Args_01,
2598 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2599 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2608 bool isInsertedFlag =
false;
2609 HashTableLink *result = d_impl.tryEmplace(
2622#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 5
2623 template<
class LOOKUP_KEY,
class Args_01,
2629 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2630 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2640 bool isInsertedFlag =
false;
2641 HashTableLink *result = d_impl.tryEmplace(
2655#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 6
2656 template<
class LOOKUP_KEY,
class Args_01,
2663 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2664 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2675 bool isInsertedFlag =
false;
2676 HashTableLink *result = d_impl.tryEmplace(
2691#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 7
2692 template<
class LOOKUP_KEY,
class Args_01,
2700 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2701 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2713 bool isInsertedFlag =
false;
2714 HashTableLink *result = d_impl.tryEmplace(
2730#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 8
2731 template<
class LOOKUP_KEY,
class Args_01,
2740 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2741 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2754 bool isInsertedFlag =
false;
2755 HashTableLink *result = d_impl.tryEmplace(
2772#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 9
2773 template<
class LOOKUP_KEY,
class Args_01,
2783 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2784 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2798 bool isInsertedFlag =
false;
2799 HashTableLink *result = d_impl.tryEmplace(
2817#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_D >= 10
2818 template<
class LOOKUP_KEY,
class Args_01,
2829 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2830 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2845 bool isInsertedFlag =
false;
2846 HashTableLink *result = d_impl.tryEmplace(
2868 template <
class... Args>
2872 template <
class... Args>
2874 BloombergLP::bslmf::MovableRef<KEY> key,
2877 template<
class LOOKUP_KEY,
class... Args>
2879 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2880 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value
2885 pair<iterator, bool> >::type
2890 bool isInsertedFlag =
false;
2891 HashTableLink *result = d_impl.tryEmplace(
2897 return ResultType(
iterator(result), isInsertedFlag);
2900 template<
class... Args>
2905 template <
class... Args>
2907 BloombergLP::bslmf::MovableRef<KEY> key,
2910 template<
class LOOKUP_KEY,
class... Args>
2912 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2913 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2919 bool isInsertedFlag =
false;
2920 HashTableLink *result = d_impl.tryEmplace(
2951 template <
class LOOKUP_KEY>
2953 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
2954 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
2956 at(
const LOOKUP_KEY& key)
const {
2957 HashTableLink *node = d_impl.find(key);
2960 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
2961 "unordered_map<...>::at(LOOKUP_KEY) const: invalid key value");
2963 return static_cast<HashTableNode *
>(node)->value().second;
3012 template <class LOOKUP_KEY>
3014 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
3015 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
3017 bucket(const LOOKUP_KEY& key)
const
3019 return d_impl.bucketIndexForKey(key);
3050 template <class LOOKUP_KEY>
3052 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
3053 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
3055 count(const LOOKUP_KEY& key)
const
3057 return d_impl.find(key) != 0;
3075 template <
class LOOKUP_KEY>
3077 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value &&
3078 BloombergLP::bslmf::IsTransparentPredicate<EQUAL,
3081 contains(
const LOOKUP_KEY& key)
const
3104 template <class LOOKUP_KEY>
3106 BloombergLP::
bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
3107 && BloombergLP::
bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
3109 equal_range(const LOOKUP_KEY& key)
const
3113 HashTableLink *first = d_impl.find(key);
3139 template <
class LOOKUP_KEY>
3141 BloombergLP::bslmf::IsTransparentPredicate<HASH, LOOKUP_KEY>::value
3142 && BloombergLP::bslmf::IsTransparentPredicate<EQUAL,LOOKUP_KEY>::value,
3144 find(
const LOOKUP_KEY& key)
const
3196#ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3208 class INPUT_ITERATOR,
3209 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3211 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3215 class = bsl::enable_if_t<
std::is_invocable_v<HASH, const KEY &>>,
3216 class = bsl::enable_if_t<
3217 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
3218 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3222 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
3225 ALLOCATOR = ALLOCATOR())
3235 class INPUT_ITERATOR,
3239 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3241 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3242 class DEFAULT_ALLOCATOR = bsl::allocator<pair<const KEY, VALUE>>,
3243 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3247 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3261 class INPUT_ITERATOR,
3264 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3266 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3267 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
3268 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3272 typename bsl::allocator_traits<ALLOCATOR>::size_type,
3275->
unordered_map<KEY, VALUE, HASH, bsl::equal_to<KEY>, ALLOCATOR>;
3284 class INPUT_ITERATOR,
3287 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3289 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3290 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3291 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3295 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3307 class INPUT_ITERATOR,
3309 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3311 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3312 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3316 typename bsl::allocator_traits<ALLOCATOR>::size_type,
3318->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
3325 class INPUT_ITERATOR,
3327 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3329 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3330 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3331 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3335 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3346 class INPUT_ITERATOR,
3348 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3350 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3351 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3354->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
3361 class INPUT_ITERATOR,
3363 class KEY = BloombergLP::bslstl::IteratorUtil::IterKey_t<INPUT_ITERATOR>,
3365 BloombergLP::bslstl::IteratorUtil::IterMapped_t<INPUT_ITERATOR>,
3366 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3367 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3383 class HASH = bsl::hash<KEY>,
3384 class EQUAL = bsl::equal_to<KEY>,
3385 class ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3386 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
3387 class = bsl::enable_if_t<
3388 std::is_invocable_v<EQUAL, const KEY &, const KEY &>>,
3389 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3391unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3392 typename bsl::allocator_traits<ALLOCATOR>::size_type = 0,
3395 ALLOCATOR = ALLOCATOR())
3410 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3411 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3413unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3414 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3432 class = bsl::enable_if_t<std::is_invocable_v<HASH, const KEY &>>,
3433 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3435unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3436 typename bsl::allocator_traits<ALLOCATOR>::size_type,
3439->
unordered_map<KEY, VALUE, HASH, bsl::equal_to<KEY>, ALLOCATOR>;
3452 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3453 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3455unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3456 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3469 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3471unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3472 typename bsl::allocator_traits<ALLOCATOR>::size_type,
3474->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
3484 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3485 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3487unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>,
3488 typename bsl::allocator_traits<DEFAULT_ALLOCATOR>::size_type,
3502 class = bsl::enable_if_t<bsl::IsStdAllocator_v<ALLOCATOR>>
3504unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>, ALLOCATOR)
3505->
unordered_map<KEY, VALUE, bsl::hash<KEY>, bsl::equal_to<KEY>, ALLOCATOR>;
3515 class DEFAULT_ALLOCATOR = bsl::allocator<bsl::pair<const KEY, VALUE>>,
3516 class = bsl::enable_if_t<bsl::is_convertible_v<ALLOC *, DEFAULT_ALLOCATOR>>
3518unordered_map(std::initializer_list<bsl::pair<const KEY, VALUE>>, ALLOC *)
3533template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
3534bool operator==(const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& lhs,
3535 const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& rhs);
3537#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
3538template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
3539bool operator!=(const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& lhs,
3540 const unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& rhs);
3563erase_if(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& m,
3564 PREDICATE predicate);
3579template <class KEY, class VALUE, class HASH, class EQUAL, class ALLOCATOR>
3580void
swap(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& a,
3581 unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& b)
3596template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3597template <
class INPUT_ITERATOR,
class SENTINEL>
3599void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::constructFromRange(
3600 INPUT_ITERATOR first,
3610 if (first == last) {
3615 BloombergLP::bslstl::IteratorUtil::
3616 canCalculateInsertDistance<INPUT_ITERATOR,SENTINEL>()) {
3618 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
3621 bool isInsertedFlag;
3623 while (first != last) {
3624 d_impl.insertIfMissing(&isInsertedFlag, *first);
3629#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
3630 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
3632template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3633template <
class INPUT_ITERATOR,
class SENTINEL>
3635void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::constructFromRange(
3636 INPUT_ITERATOR first,
3641 !BloombergLP::bslstl::IteratorUtil
3642 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
3643 || numElements ==
static_cast<size_t>(
3644 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
3646 if (0 < numElements) {
3650 bool isInsertedFlag;
3652 while (first != last) {
3653 d_impl.insertIfMissing(&isInsertedFlag, *first);
3661template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3663unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::
3664unordered_map(size_type initialNumBuckets,
3665 const HASH& hashFunction,
3666 const EQUAL& keyEqual,
3667 const ALLOCATOR& basicAllocator)
3668: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3672template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3674unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3675 size_type initialNumBuckets,
3676 const HASH& hashFunction,
3677 const ALLOCATOR& basicAllocator)
3678: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3682template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3684unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3685 size_type initialNumBuckets,
3686 const ALLOCATOR& basicAllocator)
3687: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3691template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3693unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3694 const ALLOCATOR& basicAllocator)
3695: d_impl(basicAllocator)
3699template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3701unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map()
3706template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3707template <
class INPUT_ITERATOR>
3709unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3710 INPUT_ITERATOR first,
3711 INPUT_ITERATOR last,
3712 size_type initialNumBuckets,
3713 const HASH& hashFunction,
3714 const EQUAL& keyEqual,
3715 const ALLOCATOR& basicAllocator)
3716: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3718 constructFromRange(first, last);
3721template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3722template <
class INPUT_ITERATOR>
3724unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3725 INPUT_ITERATOR first,
3726 INPUT_ITERATOR last,
3727 size_type initialNumBuckets,
3728 const HASH& hashFunction,
3729 const ALLOCATOR& basicAllocator)
3730: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3732 this->insert(first, last);
3735template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3736template <
class INPUT_ITERATOR>
3738unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3739 INPUT_ITERATOR first,
3740 INPUT_ITERATOR last,
3741 size_type initialNumBuckets,
3742 const ALLOCATOR& basicAllocator)
3743: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3745 this->insert(first, last);
3748template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3749template <
class INPUT_ITERATOR>
3751unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3752 INPUT_ITERATOR first,
3753 INPUT_ITERATOR last,
3754 const ALLOCATOR& basicAllocator)
3755: d_impl(basicAllocator)
3757 this->insert(first, last);
3760#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3761template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3762# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3763template <
class,
class,
class>
3766unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3767 std::initializer_list<value_type> values,
3768 size_type initialNumBuckets,
3769 const HASH& hashFunction,
3770 const EQUAL& keyEqual,
3771 const ALLOCATOR& basicAllocator)
3772: d_impl(hashFunction, keyEqual, initialNumBuckets, 1.0f, basicAllocator)
3774 insert(values.begin(), values.end());
3777template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3778# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3779template <
class,
class>
3782unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3783 std::initializer_list<value_type> values,
3784 size_type initialNumBuckets,
3785 const HASH& hashFunction,
3786 const ALLOCATOR& basicAllocator)
3787: d_impl(hashFunction, EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3789 insert(values.begin(), values.end());
3792template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3793# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3797unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3798 std::initializer_list<value_type> values,
3799 size_type initialNumBuckets,
3800 const ALLOCATOR& basicAllocator)
3801: d_impl(HASH(), EQUAL(), initialNumBuckets, 1.0f, basicAllocator)
3803 insert(values.begin(), values.end());
3806template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3807# ifdef BSLS_COMPILERFEATURES_SUPPORT_CTAD
3811unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3812 std::initializer_list<value_type> values,
3813 const ALLOCATOR& basicAllocator)
3814: d_impl(basicAllocator)
3816 insert(values.begin(), values.end());
3820template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3822unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3823 const unordered_map& original)
3824: d_impl(original.d_impl,
3825 AllocatorTraits::select_on_container_copy_construction(
3826 original.get_allocator()))
3830template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3832unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3833 const unordered_map& original,
3834 const typename type_identity<ALLOCATOR>::type& basicAllocator)
3835: d_impl(original.d_impl, basicAllocator)
3839template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3841unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3842 BloombergLP::bslmf::MovableRef<unordered_map> original)
3843: d_impl(MoveUtil::access(original).get_allocator())
3845 unordered_map& lvalue = original;
3850template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3852unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::unordered_map(
3853 BloombergLP::bslmf::MovableRef<unordered_map> original,
3854 const typename type_identity<ALLOCATOR>::type& basicAllocator)
3855: d_impl(MoveUtil::move(MoveUtil::access(original).d_impl), basicAllocator)
3859template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3861unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::~unordered_map()
3867template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3869unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>&
3870unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::operator=(
3871 const unordered_map& rhs)
3876 d_impl =
rhs.d_impl;
3881template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3883unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>&
3884unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::operator=(
3885 BloombergLP::bslmf::MovableRef<unordered_map> rhs)
3887 AllocatorTraits::is_always_equal::value &&
3888 std::is_nothrow_move_assignable<HASH>::value &&
3889 std::is_nothrow_move_assignable<EQUAL>::value)
3894 unordered_map& lvalue =
rhs;
3896 d_impl = MoveUtil::move(lvalue.d_impl);
3901#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
3902template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3904unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>&
3905unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::operator=(
3906 std::initializer_list<value_type> rhs)
3908 unordered_map tmp(
rhs.begin(),
rhs.end(), d_impl.allocator());
3916template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3918typename add_lvalue_reference<VALUE>::type
3919unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::operator[](
3920 const key_type& key)
3922 HashTableLink *node = d_impl.insertIfMissing(key);
3923 return static_cast<HashTableNode *
>(node)->value().second;
3926template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3928typename add_lvalue_reference<VALUE>::type
3929unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::operator[](
3930 BloombergLP::bslmf::MovableRef<key_type> key)
3932 HashTableLink *node = d_impl.insertIfMissing(
3933 MoveUtil::move(MoveUtil::access(key)));
3934 return static_cast<HashTableNode *
>(node)->value().second;
3937template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3939typename add_lvalue_reference<VALUE>::type
3940unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::at(
const key_type& key)
3942 HashTableLink *node = d_impl.find(key);
3945 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
3946 "unordered_map<...>::at(key_type): invalid key value");
3949 return static_cast<HashTableNode *
>(node)->value().second;
3952template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3954typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
3955unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::begin()
3958 return iterator(d_impl.elementListRoot());
3961template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3963typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
3969template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3971typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::local_iterator
3972unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::begin(size_type index)
3976 return local_iterator(&d_impl.bucketAtIndex(index));
3979template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3981typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::local_iterator
3982unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::end(size_type index)
3986 return local_iterator(0, &d_impl.bucketAtIndex(index));
3989template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
3992unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::clear()
3998#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
4001#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
4002#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT 10
4004#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E
4005#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
4007#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 0
4008template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4010 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4012unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4017 bool isInsertedFlag =
false;
4019 HashTableLink *result = d_impl.emplaceIfMissing(
4022 return ResultType(iterator(result), isInsertedFlag);
4026#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 1
4027template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4028template <
class Args_01>
4030 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4032unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4037 bool isInsertedFlag =
false;
4039 HashTableLink *result = d_impl.emplaceIfMissing(
4043 return ResultType(iterator(result), isInsertedFlag);
4047#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 2
4048template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4049template <
class Args_01,
4052 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4054unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4060 bool isInsertedFlag =
false;
4062 HashTableLink *result = d_impl.emplaceIfMissing(
4067 return ResultType(iterator(result), isInsertedFlag);
4071#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 3
4072template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4073template <
class Args_01,
4077 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4079unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4086 bool isInsertedFlag =
false;
4088 HashTableLink *result = d_impl.emplaceIfMissing(
4094 return ResultType(iterator(result), isInsertedFlag);
4098#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 4
4099template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4100template <
class Args_01,
4105 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4107unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4115 bool isInsertedFlag =
false;
4117 HashTableLink *result = d_impl.emplaceIfMissing(
4124 return ResultType(iterator(result), isInsertedFlag);
4128#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 5
4129template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4130template <
class Args_01,
4136 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4138unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4147 bool isInsertedFlag =
false;
4149 HashTableLink *result = d_impl.emplaceIfMissing(
4157 return ResultType(iterator(result), isInsertedFlag);
4161#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 6
4162template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4163template <
class Args_01,
4170 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4172unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4182 bool isInsertedFlag =
false;
4184 HashTableLink *result = d_impl.emplaceIfMissing(
4193 return ResultType(iterator(result), isInsertedFlag);
4197#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 7
4198template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4199template <
class Args_01,
4207 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4209unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4220 bool isInsertedFlag =
false;
4222 HashTableLink *result = d_impl.emplaceIfMissing(
4232 return ResultType(iterator(result), isInsertedFlag);
4236#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 8
4237template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4238template <
class Args_01,
4247 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4249unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4261 bool isInsertedFlag =
false;
4263 HashTableLink *result = d_impl.emplaceIfMissing(
4274 return ResultType(iterator(result), isInsertedFlag);
4278#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 9
4279template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4280template <
class Args_01,
4290 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4292unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4305 bool isInsertedFlag =
false;
4307 HashTableLink *result = d_impl.emplaceIfMissing(
4319 return ResultType(iterator(result), isInsertedFlag);
4323#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 10
4324template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4325template <
class Args_01,
4336 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4338unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4352 bool isInsertedFlag =
false;
4354 HashTableLink *result = d_impl.emplaceIfMissing(
4367 return ResultType(iterator(result), isInsertedFlag);
4372#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 0
4373template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4374typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4375unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4379 bool isInsertedFlag =
false;
4381 HashTableLink *result = d_impl.emplaceIfMissing(
4384 return iterator(result);
4388#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 1
4389template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4390template <
class Args_01>
4391typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4392unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4397 bool isInsertedFlag =
false;
4399 HashTableLink *result = d_impl.emplaceIfMissing(
4403 return iterator(result);
4407#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 2
4408template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4409template <
class Args_01,
4411typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4412unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4418 bool isInsertedFlag =
false;
4420 HashTableLink *result = d_impl.emplaceIfMissing(
4425 return iterator(result);
4429#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 3
4430template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4431template <
class Args_01,
4434typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4435unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4442 bool isInsertedFlag =
false;
4444 HashTableLink *result = d_impl.emplaceIfMissing(
4450 return iterator(result);
4454#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 4
4455template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4456template <
class Args_01,
4460typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4461unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4469 bool isInsertedFlag =
false;
4471 HashTableLink *result = d_impl.emplaceIfMissing(
4478 return iterator(result);
4482#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 5
4483template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4484template <
class Args_01,
4489typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4490unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4499 bool isInsertedFlag =
false;
4501 HashTableLink *result = d_impl.emplaceIfMissing(
4509 return iterator(result);
4513#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 6
4514template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4515template <
class Args_01,
4521typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4522unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4532 bool isInsertedFlag =
false;
4534 HashTableLink *result = d_impl.emplaceIfMissing(
4543 return iterator(result);
4547#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 7
4548template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4549template <
class Args_01,
4556typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4557unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4568 bool isInsertedFlag =
false;
4570 HashTableLink *result = d_impl.emplaceIfMissing(
4580 return iterator(result);
4584#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 8
4585template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4586template <
class Args_01,
4594typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4595unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4607 bool isInsertedFlag =
false;
4609 HashTableLink *result = d_impl.emplaceIfMissing(
4620 return iterator(result);
4624#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 9
4625template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4626template <
class Args_01,
4635typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4636unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4649 bool isInsertedFlag =
false;
4651 HashTableLink *result = d_impl.emplaceIfMissing(
4663 return iterator(result);
4667#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_E >= 10
4668template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4669template <
class Args_01,
4679typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4680unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4694 bool isInsertedFlag =
false;
4696 HashTableLink *result = d_impl.emplaceIfMissing(
4709 return iterator(result);
4716template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4717template <
class... Args>
4719 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4721unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace(
4726 bool isInsertedFlag =
false;
4728 HashTableLink *result = d_impl.emplaceIfMissing(
4732 return ResultType(iterator(result), isInsertedFlag);
4735template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4736template <
class... Args>
4737typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4738unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::emplace_hint(
4743 bool isInsertedFlag =
false;
4745 HashTableLink *result = d_impl.emplaceIfMissing(
4749 return iterator(result);
4754template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4756typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4757unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::erase(
4758 const_iterator position)
4762 return iterator(d_impl.remove(position.node()));
4765template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4767typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4768unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::erase(iterator position)
4770 return erase(const_iterator(position));
4773template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4774typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
4775unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::erase(
const key_type& key)
4777 HashTableLink *target = d_impl.find(key);
4779 d_impl.remove(target);
4787template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4788typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4789unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::erase(const_iterator first,
4790 const_iterator last)
4793#if defined BDE_BUILD_TARGET_SAFE_2
4794 if (first != last) {
4795 iterator it = this->
begin();
4796 const iterator
end = this->end();
4797 for (; it != first; ++it) {
4801 for (; it != last; ++it) {
4807 while (first != last) {
4808 first = this->
erase(first);
4811 return iterator(first.node());
4814template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4816bool unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::contains(
4817 const key_type& key)
const
4819 return find(key) !=
end();
4822template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4824typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4825unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::find(
const key_type& key)
4827 return iterator(d_impl.find(key));
4830template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4832pair<typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4834unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insert(
4835 const value_type& value)
4839 bool isInsertedFlag =
false;
4841 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag, value);
4843 return ResultType(iterator(result), isInsertedFlag);
4846template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4848typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4849unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insert(
4851 const value_type& value)
4853 bool isInsertedFlag;
4855 HashTableLink *result = d_impl.insertIfMissing(&isInsertedFlag, value);
4857 return iterator(result);
4860template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4861template <
class INPUT_ITERATOR>
4862void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insert(
4863 INPUT_ITERATOR first,
4864 INPUT_ITERATOR last)
4866 insertFromRange(first, last);
4869#if defined(BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS)
4870template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4871void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insert(
4872 std::initializer_list<value_type> values)
4874 insert(values.begin(), values.end());
4881template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4882template <
class BDE_OTHER_TYPE>
4890 bool isInsertedFlag =
false;
4891 HashTableLink *result = d_impl.insertOrAssign(
4896 return ResultType(iterator(result), isInsertedFlag);
4899template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4900template <
class BDE_OTHER_TYPE>
4904 BloombergLP::bslmf::MovableRef<KEY> key,
4908 bool isInsertedFlag =
false;
4909 HashTableLink *result = d_impl.insertOrAssign(
4914 return ResultType(iterator(result), isInsertedFlag);
4917template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4918template <
class BDE_OTHER_TYPE>
4919typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4921 const_iterator hint,
4925 bool isInsertedFlag =
false;
4926 HashTableLink *result = d_impl.insertOrAssign(
4931 return iterator(result);
4934template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4935template <
class BDE_OTHER_TYPE>
4936typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator
4938 const_iterator hint,
4939 BloombergLP::bslmf::MovableRef<KEY> key,
4942 bool isInsertedFlag =
false;
4943 HashTableLink *result = d_impl.insertOrAssign(
4948 return iterator(result);
4952template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4954 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator,
4955 typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::iterator>
4956unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::equal_range(
4957 const key_type& key)
4961 HashTableLink *first = d_impl.find(key);
4962 return first ? ResultType(iterator(first), iterator(first->nextLink()))
4963 : ResultType(iterator(0), iterator(0));
4966template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4969unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::max_load_factor(
4970 float newMaxLoadFactor)
4972 d_impl.setMaxLoadFactor(newMaxLoadFactor);
4975template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4978unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::rehash(
4979 size_type numBuckets)
4981 d_impl.rehashForNumBuckets(numBuckets);
4984template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4987unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::reserve(
4988 size_type numElements)
4990 d_impl.reserveForNumElements(numElements);
4993template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
4996unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::swap(unordered_map& other)
4998 AllocatorTraits::is_always_equal::value &&
4999 bsl::is_nothrow_swappable<HASH>::value &&
5000 bsl::is_nothrow_swappable<EQUAL>::value)
5002 d_impl.swap(other.d_impl);
5005#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
5008#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
5009#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT 10
5011#ifndef BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G
5012#define BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT
5014#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 0
5015template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5024 bool isInsertedFlag =
false;
5025 HashTableLink *result = d_impl.tryEmplace(
5030 return ResultType(iterator(result), isInsertedFlag);
5034#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 1
5035template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5036template <
class Args_01>
5046 bool isInsertedFlag =
false;
5047 HashTableLink *result = d_impl.tryEmplace(
5053 return ResultType(iterator(result), isInsertedFlag);
5057#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 2
5058template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5059template <
class Args_01,
5071 bool isInsertedFlag =
false;
5072 HashTableLink *result = d_impl.tryEmplace(
5079 return ResultType(iterator(result), isInsertedFlag);
5083#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 3
5084template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5085template <
class Args_01,
5099 bool isInsertedFlag =
false;
5100 HashTableLink *result = d_impl.tryEmplace(
5108 return ResultType(iterator(result), isInsertedFlag);
5112#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 4
5113template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5114template <
class Args_01,
5130 bool isInsertedFlag =
false;
5131 HashTableLink *result = d_impl.tryEmplace(
5140 return ResultType(iterator(result), isInsertedFlag);
5144#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 5
5145template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5146template <
class Args_01,
5164 bool isInsertedFlag =
false;
5165 HashTableLink *result = d_impl.tryEmplace(
5175 return ResultType(iterator(result), isInsertedFlag);
5179#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 6
5180template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5181template <
class Args_01,
5201 bool isInsertedFlag =
false;
5202 HashTableLink *result = d_impl.tryEmplace(
5213 return ResultType(iterator(result), isInsertedFlag);
5217#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 7
5218template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5219template <
class Args_01,
5241 bool isInsertedFlag =
false;
5242 HashTableLink *result = d_impl.tryEmplace(
5254 return ResultType(iterator(result), isInsertedFlag);
5258#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 8
5259template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5260template <
class Args_01,
5284 bool isInsertedFlag =
false;
5285 HashTableLink *result = d_impl.tryEmplace(
5298 return ResultType(iterator(result), isInsertedFlag);
5302#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 9
5303template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5304template <
class Args_01,
5330 bool isInsertedFlag =
false;
5331 HashTableLink *result = d_impl.tryEmplace(
5345 return ResultType(iterator(result), isInsertedFlag);
5349#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 10
5350template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5351template <
class Args_01,
5379 bool isInsertedFlag =
false;
5380 HashTableLink *result = d_impl.tryEmplace(
5395 return ResultType(iterator(result), isInsertedFlag);
5400#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 0
5401template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5407 BloombergLP::bslmf::MovableRef<KEY> key)
5410 bool isInsertedFlag =
false;
5411 HashTableLink *result = d_impl.tryEmplace(
5416 return ResultType(iterator(result), isInsertedFlag);
5420#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 1
5421template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5422template <
class Args_01>
5428 BloombergLP::bslmf::MovableRef<KEY> key,
5432 bool isInsertedFlag =
false;
5433 HashTableLink *result = d_impl.tryEmplace(
5439 return ResultType(iterator(result), isInsertedFlag);
5443#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 2
5444template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5445template <
class Args_01,
5452 BloombergLP::bslmf::MovableRef<KEY> key,
5457 bool isInsertedFlag =
false;
5458 HashTableLink *result = d_impl.tryEmplace(
5465 return ResultType(iterator(result), isInsertedFlag);
5469#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 3
5470template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5471template <
class Args_01,
5479 BloombergLP::bslmf::MovableRef<KEY> key,
5485 bool isInsertedFlag =
false;
5486 HashTableLink *result = d_impl.tryEmplace(
5494 return ResultType(iterator(result), isInsertedFlag);
5498#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 4
5499template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5500template <
class Args_01,
5509 BloombergLP::bslmf::MovableRef<KEY> key,
5516 bool isInsertedFlag =
false;
5517 HashTableLink *result = d_impl.tryEmplace(
5526 return ResultType(iterator(result), isInsertedFlag);
5530#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 5
5531template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5532template <
class Args_01,
5542 BloombergLP::bslmf::MovableRef<KEY> key,
5550 bool isInsertedFlag =
false;
5551 HashTableLink *result = d_impl.tryEmplace(
5561 return ResultType(iterator(result), isInsertedFlag);
5565#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 6
5566template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5567template <
class Args_01,
5578 BloombergLP::bslmf::MovableRef<KEY> key,
5587 bool isInsertedFlag =
false;
5588 HashTableLink *result = d_impl.tryEmplace(
5599 return ResultType(iterator(result), isInsertedFlag);
5603#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 7
5604template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5605template <
class Args_01,
5617 BloombergLP::bslmf::MovableRef<KEY> key,
5627 bool isInsertedFlag =
false;
5628 HashTableLink *result = d_impl.tryEmplace(
5640 return ResultType(iterator(result), isInsertedFlag);
5644#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 8
5645template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5646template <
class Args_01,
5659 BloombergLP::bslmf::MovableRef<KEY> key,
5670 bool isInsertedFlag =
false;
5671 HashTableLink *result = d_impl.tryEmplace(
5684 return ResultType(iterator(result), isInsertedFlag);
5688#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 9
5689template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5690template <
class Args_01,
5704 BloombergLP::bslmf::MovableRef<KEY> key,
5716 bool isInsertedFlag =
false;
5717 HashTableLink *result = d_impl.tryEmplace(
5731 return ResultType(iterator(result), isInsertedFlag);
5735#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 10
5736template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5737template <
class Args_01,
5752 BloombergLP::bslmf::MovableRef<KEY> key,
5765 bool isInsertedFlag =
false;
5766 HashTableLink *result = d_impl.tryEmplace(
5781 return ResultType(iterator(result), isInsertedFlag);
5786#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 0
5787template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5791 const_iterator hint,
5794 bool isInsertedFlag =
false;
5795 HashTableLink *result = d_impl.tryEmplace(
5800 return iterator(result);
5804#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 1
5805template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5806template <
class Args_01>
5810 const_iterator hint,
5814 bool isInsertedFlag =
false;
5815 HashTableLink *result = d_impl.tryEmplace(
5821 return iterator(result);
5825#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 2
5826template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5827template <
class Args_01,
5832 const_iterator hint,
5837 bool isInsertedFlag =
false;
5838 HashTableLink *result = d_impl.tryEmplace(
5845 return iterator(result);
5849#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 3
5850template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5851template <
class Args_01,
5857 const_iterator hint,
5863 bool isInsertedFlag =
false;
5864 HashTableLink *result = d_impl.tryEmplace(
5872 return iterator(result);
5876#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 4
5877template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5878template <
class Args_01,
5885 const_iterator hint,
5892 bool isInsertedFlag =
false;
5893 HashTableLink *result = d_impl.tryEmplace(
5902 return iterator(result);
5906#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 5
5907template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5908template <
class Args_01,
5916 const_iterator hint,
5924 bool isInsertedFlag =
false;
5925 HashTableLink *result = d_impl.tryEmplace(
5935 return iterator(result);
5939#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 6
5940template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5941template <
class Args_01,
5950 const_iterator hint,
5959 bool isInsertedFlag =
false;
5960 HashTableLink *result = d_impl.tryEmplace(
5971 return iterator(result);
5975#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 7
5976template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
5977template <
class Args_01,
5987 const_iterator hint,
5997 bool isInsertedFlag =
false;
5998 HashTableLink *result = d_impl.tryEmplace(
6010 return iterator(result);
6014#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 8
6015template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6016template <
class Args_01,
6027 const_iterator hint,
6038 bool isInsertedFlag =
false;
6039 HashTableLink *result = d_impl.tryEmplace(
6052 return iterator(result);
6056#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 9
6057template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6058template <
class Args_01,
6070 const_iterator hint,
6082 bool isInsertedFlag =
false;
6083 HashTableLink *result = d_impl.tryEmplace(
6097 return iterator(result);
6101#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 10
6102template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6103template <
class Args_01,
6116 const_iterator hint,
6129 bool isInsertedFlag =
false;
6130 HashTableLink *result = d_impl.tryEmplace(
6145 return iterator(result);
6150#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 0
6151template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6155 const_iterator hint,
6156 BloombergLP::bslmf::MovableRef<KEY> key)
6158 bool isInsertedFlag =
false;
6159 HashTableLink *result = d_impl.tryEmplace(
6164 return iterator(result);
6168#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 1
6169template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6170template <
class Args_01>
6174 const_iterator hint,
6175 BloombergLP::bslmf::MovableRef<KEY> key,
6178 bool isInsertedFlag =
false;
6179 HashTableLink *result = d_impl.tryEmplace(
6185 return iterator(result);
6189#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 2
6190template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6191template <
class Args_01,
6196 const_iterator hint,
6197 BloombergLP::bslmf::MovableRef<KEY> key,
6201 bool isInsertedFlag =
false;
6202 HashTableLink *result = d_impl.tryEmplace(
6209 return iterator(result);
6213#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 3
6214template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6215template <
class Args_01,
6221 const_iterator hint,
6222 BloombergLP::bslmf::MovableRef<KEY> key,
6227 bool isInsertedFlag =
false;
6228 HashTableLink *result = d_impl.tryEmplace(
6236 return iterator(result);
6240#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 4
6241template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6242template <
class Args_01,
6249 const_iterator hint,
6250 BloombergLP::bslmf::MovableRef<KEY> key,
6256 bool isInsertedFlag =
false;
6257 HashTableLink *result = d_impl.tryEmplace(
6266 return iterator(result);
6270#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 5
6271template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6272template <
class Args_01,
6280 const_iterator hint,
6281 BloombergLP::bslmf::MovableRef<KEY> key,
6288 bool isInsertedFlag =
false;
6289 HashTableLink *result = d_impl.tryEmplace(
6299 return iterator(result);
6303#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 6
6304template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6305template <
class Args_01,
6314 const_iterator hint,
6315 BloombergLP::bslmf::MovableRef<KEY> key,
6323 bool isInsertedFlag =
false;
6324 HashTableLink *result = d_impl.tryEmplace(
6335 return iterator(result);
6339#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 7
6340template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6341template <
class Args_01,
6351 const_iterator hint,
6352 BloombergLP::bslmf::MovableRef<KEY> key,
6361 bool isInsertedFlag =
false;
6362 HashTableLink *result = d_impl.tryEmplace(
6374 return iterator(result);
6378#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 8
6379template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6380template <
class Args_01,
6391 const_iterator hint,
6392 BloombergLP::bslmf::MovableRef<KEY> key,
6402 bool isInsertedFlag =
false;
6403 HashTableLink *result = d_impl.tryEmplace(
6416 return iterator(result);
6420#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 9
6421template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6422template <
class Args_01,
6434 const_iterator hint,
6435 BloombergLP::bslmf::MovableRef<KEY> key,
6446 bool isInsertedFlag =
false;
6447 HashTableLink *result = d_impl.tryEmplace(
6461 return iterator(result);
6465#if BSLSTL_UNORDEREDMAP_VARIADIC_LIMIT_G >= 10
6466template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6467template <
class Args_01,
6480 const_iterator hint,
6481 BloombergLP::bslmf::MovableRef<KEY> key,
6493 bool isInsertedFlag =
false;
6494 HashTableLink *result = d_impl.tryEmplace(
6509 return iterator(result);
6516template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6517template <
class... Args>
6527 bool isInsertedFlag =
false;
6528 HashTableLink *result = d_impl.tryEmplace(
6534 return ResultType(iterator(result), isInsertedFlag);
6537template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6538template <
class... Args>
6544 BloombergLP::bslmf::MovableRef<KEY> key,
6548 bool isInsertedFlag =
false;
6549 HashTableLink *result = d_impl.tryEmplace(
6555 return ResultType(iterator(result), isInsertedFlag);
6558template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6559template <
class... Args>
6563 const_iterator hint,
6567 bool isInsertedFlag =
false;
6568 HashTableLink *result = d_impl.tryEmplace(
6574 return iterator(result);
6577template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6578template <
class... Args>
6582 const_iterator hint,
6583 BloombergLP::bslmf::MovableRef<KEY> key,
6586 bool isInsertedFlag =
false;
6587 HashTableLink *result = d_impl.tryEmplace(
6593 return iterator(result);
6598template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6599template <
class INPUT_ITERATOR,
class SENTINEL>
6601void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insertFromRange(
6602 INPUT_ITERATOR first,
6613 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()) {
6615 + BloombergLP::bslstl::IteratorUtil::insertDistance(first, last));
6618 bool isInsertedFlag;
6620 while (first != last) {
6621 d_impl.insertIfMissing(&isInsertedFlag, *first);
6626#if defined(BSLS_LIBRARYFEATURES_HAS_CPP20_CONCEPTS) \
6627 && defined(BSLS_LIBRARYFEATURES_HAS_CPP20_RANGES)
6629template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6630template <
class INPUT_ITERATOR,
class SENTINEL>
6632void unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::insertFromRange(
6633 INPUT_ITERATOR first,
6638 !BloombergLP::bslstl::IteratorUtil
6639 ::canCalculateInsertDistance<INPUT_ITERATOR, SENTINEL>()
6640 || numElements ==
static_cast<size_t>(
6641 BloombergLP::bslstl::IteratorUtil::insertDistance(first, last))));
6645 bool isInsertedFlag;
6647 while (first != last) {
6648 d_impl.insertIfMissing(&isInsertedFlag, *first);
6656template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6657typename add_lvalue_reference<const VALUE>::type
6658unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::at(
6659 const key_type& key)
const
6661 HashTableLink *target = d_impl.find(key);
6663 BloombergLP::bslstl::StdExceptUtil::throwOutOfRange(
6664 "unordered_map<...>::at(key_type): invalid key value");
6666 return static_cast<HashTableNode *
>(target)->value().second;
6669template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6671typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_iterator
6672unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::begin() const
6675 return const_iterator(d_impl.elementListRoot());
6678template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6680typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_iterator
6681unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::end() const
6684 return const_iterator();
6687template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6689typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_iterator
6690unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::cbegin() const
6693 return const_iterator(d_impl.elementListRoot());
6696template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6698typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_iterator
6699unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::cend() const
6702 return const_iterator();
6705template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6708unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_local_iterator
6709unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::begin(size_type index)
const
6713 return const_local_iterator(&d_impl.bucketAtIndex(index));
6716template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6719unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_local_iterator
6720unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::end(size_type index)
const
6724 return const_local_iterator(0, &d_impl.bucketAtIndex(index));
6727template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6730unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_local_iterator
6731unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::cbegin(
6732 size_type index)
const
6736 return const_local_iterator(&d_impl.bucketAtIndex(index));
6739template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6742unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_local_iterator
6743unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::cend(size_type index)
const
6747 return const_local_iterator(0, &d_impl.bucketAtIndex(index));
6750template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6752typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6753unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::bucket(
6754 const key_type& key)
const
6756 return d_impl.bucketIndexForKey(key);
6759template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6761typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6762unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::bucket_count() const
6765 return d_impl.numBuckets();
6768template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6770typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6771unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::max_bucket_count() const
6774 return d_impl.maxNumBuckets();
6777template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6779typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6780unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::bucket_size(
6781 size_type index)
const
6785 return d_impl.countElementsInBucket(index);
6788template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6790typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6791unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::count(
6792 const key_type& key)
const
6794 return d_impl.find(key) != 0;
6797template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6800unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::empty() const
6803 return 0 == d_impl.size();
6806template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6811 ALLOCATOR>::const_iterator,
6812 typename unordered_map<KEY,
6816 ALLOCATOR>::const_iterator>
6817unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::equal_range(
6818 const key_type& key)
const
6822 HashTableLink *first = d_impl.find(key);
6824 ? ResultType(const_iterator(first), const_iterator(first->nextLink()))
6825 : ResultType(const_iterator(0), const_iterator(0));
6828template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6831 unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::const_iterator
6832unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::find(
6833 const key_type& key)
const
6835 return const_iterator(d_impl.find(key));
6838template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6841unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::get_allocator() const
6844 return d_impl.allocator();
6847template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6849HASH unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::hash_function()
const
6851 return d_impl.hasher();
6854template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6856EQUAL unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::key_eq()
const
6858 return d_impl.comparator();
6861template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6864unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::load_factor() const
6867 return d_impl.loadFactor();
6870template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6873unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::max_load_factor() const
6876 return d_impl.maxLoadFactor();
6879template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6881typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6882unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size() const
6885 return d_impl.size();
6888template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6890typename unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::size_type
6891unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>::max_size() const
6894 return d_impl.maxSize();
6900template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6906 return lhs.d_impl ==
rhs.d_impl;
6909#ifndef BSLS_COMPILERFEATURES_SUPPORT_THREE_WAY_COMPARISON
6910template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6929bsl::erase_if(unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR>& m,
6930 PREDICATE predicate)
6932 return BloombergLP::bslstl::AlgorithmUtil::containerEraseIf(m, predicate);
6935template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6960template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6961struct HasStlIterators<
bsl::unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR> >
6969template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6970struct UsesBslmaAllocator<
bsl::unordered_map<KEY,
6982template <
class KEY,
class VALUE,
class HASH,
class EQUAL,
class ALLOCATOR>
6983struct IsBitwiseMoveable<
6984 bsl::unordered_map<KEY, VALUE, HASH, EQUAL, ALLOCATOR> >
6985 : ::BloombergLP::bslmf::IsBitwiseMoveable<BloombergLP::bslstl::HashTable<
6986 ::BloombergLP::bslstl::
6987 UnorderedMapKeyConfiguration<KEY, bsl::pair<const KEY, VALUE> >,
6997# error Not valid except when included from bslstl_unorderedmap.h
Definition bslma_bslallocator.h:588
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
pair< iterator, bool > insert_or_assign(const KEY &key, BDE_OTHER_TYPE &&obj)
size_type size() const BSLS_KEYWORD_NOEXCEPT
Return the number of elements in this unordered map.
Definition bslstl_unorderedmap.h:4078
~unordered_map()
Destroy this object and each of its elements.
Definition bslstl_unorderedmap.h:3283
void insert_range(BSLS_COMPILERFEATURES_FORWARD_REF(RANGE) range)
Definition bslstl_unorderedmap.h:1778
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 > &)
iterator end() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3386
AllocatorTraits::pointer pointer
Definition bslstl_unorderedmap.h:1229
value_type & reference
Definition bslstl_unorderedmap.h:1224
EQUAL key_equal
Definition bslstl_unorderedmap.h:1221
AllocatorTraits::const_pointer const_pointer
Definition bslstl_unorderedmap.h:1230
ALLOCATOR allocator_type
Definition bslstl_unorderedmap.h:1222
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition bslstl_unorderedmap.h:3442
size_type bucket(const key_type &key) const
Definition bslstl_unorderedmap.h:3949
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
HASH hash_function() const
Definition bslstl_unorderedmap.h:4045
allocator_type get_allocator() const BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:4037
HASH hasher
Definition bslstl_unorderedmap.h:1220
BloombergLP::bslstl::HashTableBucketIterator< value_type, difference_type > local_iterator
Definition bslstl_unorderedmap.h:1237
void reserve(size_type numElements)
Definition bslstl_unorderedmap.h:3694
pair< iterator, bool > insert(const value_type &value)
Definition bslstl_unorderedmap.h:3543
iterator erase(const_iterator position)
Definition bslstl_unorderedmap.h:3466
EQUAL key_eq() const
Definition bslstl_unorderedmap.h:4052
pair< iterator, bool > emplace(Args &&... args)
const value_type & const_reference
Definition bslstl_unorderedmap.h:1225
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
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
KEY key_type
Definition bslstl_unorderedmap.h:1217
add_lvalue_reference< VALUE >::type at(const key_type &key)
Definition bslstl_unorderedmap.h:3362
VALUE mapped_type
Definition bslstl_unorderedmap.h:1218
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
bool contains(const key_type &key) const
Definition bslstl_unorderedmap.h:3525
iterator begin() BSLS_KEYWORD_NOEXCEPT
Definition bslstl_unorderedmap.h:3377
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_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
void swap(OptionValue &a, OptionValue &b)
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
bool operator==(const memory_resource &a, const memory_resource &b)
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