STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
concurrent_unordered_set.h
Go to the documentation of this file.
1 /***
2 * ==++==
3 *
4 * Copyright (c) Microsoft Corporation. All rights reserved.
5 *
6 * ==--==
7 * =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
8 *
9 * concurrent_unordered_set.h
10 *
11 * =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
12 ****/
13 #pragma once
14 
15 #include <utility>
17 
18 #define _PPL_CONTAINER
19 
20 #if !(defined (_M_X64) || defined (_M_IX86) || defined (_M_ARM) || defined (_M_ARM64))
21  #error ERROR: Concurrency Runtime is supported only on X64, X86, ARM, and ARM64 architectures.
22 #endif /* !(defined (_M_X64) || defined (_M_IX86) || defined (_M_ARM) || defined (_M_ARM64)) */
23 
24 #if defined (_M_CEE)
25  #error ERROR: Concurrency Runtime is not supported when compiling /clr.
26 #endif /* defined (_M_CEE) */
27 
28 #pragma pack(push,_CRT_PACKING)
29 #pragma warning(push)
30 #pragma warning(disable: 4100) // Unreferenced formal parameter - needed for document generation
31 
32 namespace Concurrency
33 {
34 namespace details
35 {
36 // Template class for hash set traits
37 template<typename _Key_type, typename _Key_comparator, typename _Allocator_type, bool _Allow_multimapping>
39 {
40 public:
41  typedef _Key_type value_type;
42  typedef _Key_type key_type;
43  typedef _Key_comparator _Key_compare;
44 
45  typedef typename _Allocator_type::template rebind<value_type>::other allocator_type;
46 
47  enum
48  {
49  _M_allow_multimapping = _Allow_multimapping
50  };
51 
53  {
54  }
55 
56  _Concurrent_unordered_set_traits(const _Key_comparator& _Traits) : _M_comparator(_Traits)
57  {
58  }
59 
60  typedef _Key_compare _Value_compare;
61 
62  static const _Key_type& _Key_function(const value_type& _Value)
63  {
64  return _Value;
65  }
66 
67  _Key_comparator _M_comparator; // the comparator predicate for keys
68 };
69 } // namespace details;
70 
96 
97 template <typename _Key_type, typename _Hasher = std::hash<_Key_type>, typename _Key_equality = std::equal_to<_Key_type>, typename _Allocator_type = std::allocator<_Key_type> >
98 class concurrent_unordered_set : public details::_Concurrent_hash< details::_Concurrent_unordered_set_traits<_Key_type, details::_Hash_compare<_Key_type, _Hasher, _Key_equality>, _Allocator_type, false> >
99 {
100 public:
101  // Base type definitions
105 
109 
110  typedef _Key_type key_type;
111 
115 
116  typedef typename _Mybase::value_type value_type;
117 
121 
122  typedef _Hasher hasher;
123 
127 
128  typedef _Key_equality key_equal;
129 
133 
135 
139 
140  typedef typename _Mybase::pointer pointer;
141 
145 
147 
151 
152  typedef typename _Mybase::reference reference;
153 
157 
159 
163 
164  typedef typename _Mybase::size_type size_type;
165 
169 
171 
175 
176  typedef typename _Mybase::iterator iterator;
177 
181 
183 
187 
189 
193 
195 
220 
221  explicit concurrent_unordered_set(size_type _Number_of_buckets = 8, const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),
222  const allocator_type& _Allocator = allocator_type())
223  : _Mybase(_Number_of_buckets, _Key_compare(_Hasher, _Key_equality), _Allocator)
224  {
225  this->rehash(_Number_of_buckets);
226  }
227 
243 
244  concurrent_unordered_set(const allocator_type& _Allocator) : _Mybase(8, _Key_compare(), _Allocator)
245  {
246  }
247 
281 
282  template <typename _Iterator>
283  concurrent_unordered_set(_Iterator _First, _Iterator _Last, size_type _Number_of_buckets = 8, const hasher& _Hasher = hasher(),
284  const key_equal& _Key_equality = key_equal(), const allocator_type& _Allocator = allocator_type())
285  : _Mybase(_Number_of_buckets, _Key_compare(), allocator_type())
286  {
287  this->rehash(_Number_of_buckets);
288  for (; _First != _Last; ++_First)
289  {
290  this->_Insert(*_First);
291  }
292  }
293 
309 
310  concurrent_unordered_set(const concurrent_unordered_set& _Uset) : _Mybase(_Uset)
311  {
312  }
313 
332 
333  concurrent_unordered_set(const concurrent_unordered_set& _Uset, const allocator_type& _Allocator) : _Mybase(_Uset, _Allocator)
334  {
335  }
336 
352 
354  {
355  }
356 
370 
372  {
373  _Mybase::operator=(_Uset);
374  return (*this);
375  }
376 
390 
392  {
394  return (*this);
395  }
396 
418 
419  std::pair<iterator, bool> insert(const value_type& _Value)
420  {
421  return this->_Insert(_Value);
422  }
423 
449 
450  iterator insert(const_iterator _Where, const value_type& _Value)
451  {
452  // Current implementation ignores the hint. The method is provided for compatibility with unordered_set.
453  return this->_Insert(_Value).first;
454  }
455 
480 
481  template<class _Iterator>
482  void insert(_Iterator _First, _Iterator _Last)
483  {
484  this->_Insert(_First, _Last);
485  }
486 
511 
512  template<class _Valty>
513  std::pair<iterator, bool> insert(_Valty&& _Value)
514  {
515  return this->_Insert(std::forward<_Valty>(_Value));
516  }
517 
546 
547  template<class _Valty>
548  typename std::enable_if<!std::is_same<const_iterator,
549  typename std::remove_reference<_Valty>::type>::value, iterator>::type
550  insert(const_iterator _Where, _Valty&& _Value)
551  {
552  // Current implementation ignores the hint. The method is provided for compatibility with unordered_set.
553  return this->_Insert(std::forward<_Valty>(_Value)).first;
554  }
555 
573 
574  iterator unsafe_erase(const_iterator _Where)
575  {
576  return _Mybase::unsafe_erase(_Where);
577  }
578 
596 
597  size_type unsafe_erase(const key_type& _Keyval)
598  {
599  return _Mybase::unsafe_erase(_Keyval);
600  }
601 
622 
623  iterator unsafe_erase(const_iterator _First, const_iterator _Last)
624  {
625  return _Mybase::unsafe_erase(_First, _Last);
626  }
627 
634 
636  {
637  _Mybase::swap(_Uset);
638  }
639 
646 
647  hasher hash_function() const
648  {
649  return this->_M_comparator._M_hash_object;
650  }
651 
658 
659  key_equal key_eq() const
660  {
661  return this->_M_comparator._M_key_compare_object;
662  }
663 };
664 
690 
691 template <typename _Key_type, typename _Hasher = std::hash<_Key_type>, typename _Key_equality = std::equal_to<_Key_type>, typename _Allocator_type = std::allocator<_Key_type> >
692 class concurrent_unordered_multiset : public details::_Concurrent_hash< details::_Concurrent_unordered_set_traits<_Key_type, details::_Hash_compare<_Key_type, _Hasher, _Key_equality>, _Allocator_type, true> >
693 {
694 public:
695  // Base type definitions
699 
703 
704  typedef _Key_type key_type;
705 
709 
710  typedef typename _Mybase::value_type value_type;
711 
715 
716  typedef _Hasher hasher;
717 
721 
722  typedef _Key_equality key_equal;
723 
727 
729 
733 
734  typedef typename _Mybase::pointer pointer;
735 
739 
741 
745 
746  typedef typename _Mybase::reference reference;
747 
751 
753 
757 
758  typedef typename _Mybase::size_type size_type;
759 
763 
765 
769 
770  typedef typename _Mybase::iterator iterator;
771 
775 
777 
781 
783 
787 
789 
814 
815  explicit concurrent_unordered_multiset(size_type _Number_of_buckets = 8, const hasher& _Hasher = hasher(), const key_equal& _Key_equality = key_equal(),
816  const allocator_type& _Allocator = allocator_type())
817  : _Mybase(_Number_of_buckets, _Key_compare(_Hasher, _Key_equality), _Allocator)
818  {
819  this->rehash(_Number_of_buckets);
820  }
821 
837 
838  concurrent_unordered_multiset(const allocator_type& _Allocator) : _Mybase(8, _Key_compare(), _Allocator)
839  {
840  }
841 
875 
876  template <typename _Iterator>
877  concurrent_unordered_multiset(_Iterator _First, _Iterator _Last, size_type _Number_of_buckets = 8, const hasher& _Hasher = hasher(),
878  const key_equal& _Key_equality = key_equal(), const allocator_type& _Allocator = allocator_type())
879  : _Mybase(_Number_of_buckets, _Key_compare(), allocator_type())
880  {
881  this->rehash(_Number_of_buckets);
882  for (; _First != _Last; ++_First)
883  {
884  this->_Insert(*_First);
885  }
886  }
887 
903 
905  {
906  }
907 
926 
927  concurrent_unordered_multiset(const concurrent_unordered_multiset& _Uset, const allocator_type& _Allocator) : _Mybase(_Uset, _Allocator)
928  {
929  }
930 
946 
948  {
949  }
950 
964 
966  {
967  _Mybase::operator=(_Uset);
968  return (*this);
969  }
970 
984 
986  {
988  return (*this);
989  }
990 
1010 
1011  iterator insert(const value_type& _Value)
1012  {
1013  return this->_Insert(_Value).first;
1014  }
1015 
1038 
1039  iterator insert(const_iterator _Where, const value_type& _Value)
1040  {
1041  // Current implementation ignores the hint. The method is provided for compatibility with unordered_multiset.
1042  return this->_Insert(_Value).first;
1043  }
1044 
1067 
1068  template<class _Iterator>
1069  void insert(_Iterator _First, _Iterator _Last)
1070  {
1071  this->_Insert(_First, _Last);
1072  }
1073 
1096 
1097  template<class _Valty>
1098  iterator insert(_Valty&& _Value)
1099  {
1100  return this->_Insert(std::forward<_Valty>(_Value)).first;
1101  }
1102 
1128 
1129  template<class _Valty>
1130  typename std::enable_if<!std::is_same<const_iterator,
1131  typename std::remove_reference<_Valty>::type>::value, iterator>::type
1132  insert(const_iterator _Where, _Valty&& _Value)
1133  {
1134  // Current implementation ignores the hint. The method is provided for compatibility with unordered_multiset.
1135  return this->_Insert(std::forward<_Valty>(_Value)).first;
1136  }
1137 
1155 
1156  iterator unsafe_erase(const_iterator _Where)
1157  {
1158  return _Mybase::unsafe_erase(_Where);
1159  }
1160 
1181 
1182  iterator unsafe_erase(const_iterator _First, const_iterator _Last)
1183  {
1184  return _Mybase::unsafe_erase(_First, _Last);
1185  }
1186 
1187 
1205 
1206  size_type unsafe_erase(const key_type& _Keyval)
1207  {
1208  return _Mybase::unsafe_erase(_Keyval);
1209  }
1210 
1217 
1219  {
1220  _Mybase::swap(_Uset);
1221  }
1222 
1229 
1230  hasher hash_function() const
1231  {
1232  return this->_M_comparator._M_hash_object;
1233  }
1234 
1241 
1242  key_equal key_eq() const
1243  {
1244  return this->_M_comparator._M_key_compare_object;
1245  }
1246 };
1247 } // namespace Concurrency
1248 
1249 namespace concurrency = ::Concurrency;
1250 
1251 #pragma warning(pop)
1252 #pragma pack(pop)
hasher hash_function() const
Returns the stored hash function object.
Definition: concurrent_unordered_set.h:647
concurrent_unordered_multiset(const concurrent_unordered_multiset &_Uset, const allocator_type &_Allocator)
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:927
_Mybase::difference_type difference_type
The type of a signed distance between two elements.
Definition: concurrent_unordered_set.h:764
_Mybase::const_reference const_reference
The type of a constant reference to an element.
Definition: concurrent_unordered_set.h:752
_Mybase::const_reference const_reference
The type of a constant reference to an element.
Definition: concurrent_unordered_set.h:158
_Concurrent_unordered_set_traits(const _Key_comparator &_Traits)
Definition: concurrent_unordered_set.h:56
std::enable_if<!std::is_same< const_iterator, typename std::remove_reference< _Valty >::type >::value, iterator >::type insert(const_iterator _Where, _Valty &&_Value)
Adds elements to the concurrent_unordered_multiset object.
Definition: concurrent_unordered_set.h:1132
_Key_type value_type
Definition: concurrent_unordered_set.h:41
_Key_equality key_equal
The type of the comparison function.
Definition: concurrent_unordered_set.h:722
void insert(_Iterator _First, _Iterator _Last)
Adds elements to the concurrent_unordered_multiset object.
Definition: concurrent_unordered_set.h:1069
std::pair< iterator, bool > insert(const value_type &_Value)
Adds elements to the concurrent_unordered_set object.
Definition: concurrent_unordered_set.h:419
concurrent_unordered_multiset & operator=(concurrent_unordered_multiset &&_Uset)
Assigns the contents of another concurrent_unordered_multiset object to this one. This method is not ...
Definition: concurrent_unordered_set.h:985
Definition: internal_concurrent_hash.h:27
_Key_comparator _Key_compare
Definition: concurrent_unordered_set.h:43
void insert(_Iterator _First, _Iterator _Last)
Adds elements to the concurrent_unordered_set object.
Definition: concurrent_unordered_set.h:482
void swap(_Concurrent_hash &_Right)
Swaps the contents of two concurrent containers. This function is not concurrency safe...
Definition: internal_concurrent_hash.h:424
hasher hash_function() const
Returns the stored hash function object.
Definition: concurrent_unordered_set.h:1230
_Mybase::iterator local_iterator
The type of a bucket iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:782
concurrent_unordered_set(const allocator_type &_Allocator)
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:244
_Mybase::const_iterator const_iterator
The type of a constant iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:182
_Mybase::value_type value_type
The type of an element.
Definition: concurrent_unordered_set.h:710
STL namespace.
_Mybase::const_pointer const_pointer
The type of a constant pointer to an element.
Definition: concurrent_unordered_set.h:740
details::_Concurrent_hash< details::_Concurrent_unordered_set_traits< _Key_type, _Key_compare, _Allocator_type, false > > _Mybase
Definition: concurrent_unordered_set.h:104
The Concurrency namespace provides classes and functions that provide access to the Concurrency Runti...
Definition: agents.h:43
_Mybase::difference_type difference_type
The type of a signed distance between two elements.
Definition: concurrent_unordered_set.h:170
_Concurrent_unordered_set_traits()
Definition: concurrent_unordered_set.h:52
_Mybase::reference reference
The type of a reference to an element.
Definition: concurrent_unordered_set.h:152
size_type unsafe_erase(const key_type &_Keyval)
Removes elements from the concurrent_unordered_set at specified positions. This method is not concurr...
Definition: concurrent_unordered_set.h:597
allocator_type::const_pointer const_pointer
Definition: internal_concurrent_hash.h:101
void swap(concurrent_unordered_multiset &_Uset)
Swaps the contents of two concurrent_unordered_multiset objects. This method is not concurrency-safe...
Definition: concurrent_unordered_set.h:1218
details::_Hash_compare< _Key_type, _Hasher, _Key_equality > _Key_compare
Definition: concurrent_unordered_set.h:697
Definition: internal_concurrent_hash.h:88
_Mybase::allocator_type allocator_type
The type of an allocator for managing storage.
Definition: concurrent_unordered_set.h:728
_Mybase::iterator iterator
The type of an iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:770
_Key_equality key_equal
The type of the comparison function.
Definition: concurrent_unordered_set.h:128
std::conditional< std::is_same< key_type, value_type >::value, typename _Mylist::const_iterator, typename _Mylist::iterator >::type iterator
Definition: internal_concurrent_hash.h:108
_Mybase::size_type size_type
The type of an unsigned distance between two elements.
Definition: concurrent_unordered_set.h:164
Definition: concurrent_unordered_set.h:38
_Mybase::reference reference
The type of a reference to an element.
Definition: concurrent_unordered_set.h:746
_Allocator_type::template rebind< value_type >::other allocator_type
Definition: concurrent_unordered_set.h:45
_Container_base0 _Container_base
Definition: xutility:246
_Key_comparator _M_comparator
Definition: concurrent_unordered_set.h:67
concurrent_unordered_set(concurrent_unordered_set &&_Uset)
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:353
concurrent_unordered_set(_Iterator _First, _Iterator _Last, size_type _Number_of_buckets=8, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &_Allocator=allocator_type())
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:283
details::_Hash_compare< _Key_type, _Hasher, _Key_equality > _Key_compare
Definition: concurrent_unordered_set.h:103
_Mybase::size_type size_type
The type of an unsigned distance between two elements.
Definition: concurrent_unordered_set.h:758
iterator insert(const_iterator _Where, const value_type &_Value)
Adds elements to the concurrent_unordered_multiset object.
Definition: concurrent_unordered_set.h:1039
Definition: internal_split_ordered_list.h:30
concurrent_unordered_multiset(const concurrent_unordered_multiset &_Uset)
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:904
concurrent_unordered_multiset(concurrent_unordered_multiset &&_Uset)
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:947
iterator unsafe_erase(const_iterator _Where)
Removes elements from the container at specified positions. This method is not concurrency-safe.
Definition: internal_concurrent_hash.h:350
The concurrent_unordered_multiset class is an concurrency-safe container that controls a varying-leng...
Definition: concurrent_unordered_set.h:692
_Mybase::iterator iterator
The type of an iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:176
iterator unsafe_erase(const_iterator _First, const_iterator _Last)
Removes elements from the concurrent_unordered_multiset at specified positions. This method is not co...
Definition: concurrent_unordered_set.h:1182
concurrent_unordered_set & operator=(concurrent_unordered_set &&_Uset)
Assigns the contents of another concurrent_unordered_set object to this one. This method is not concu...
Definition: concurrent_unordered_set.h:391
_Key_type key_type
The type of an ordering key.
Definition: concurrent_unordered_set.h:110
concurrent_unordered_set(size_type _Number_of_buckets=8, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &_Allocator=allocator_type())
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:221
iterator insert(const value_type &_Value)
Adds elements to the concurrent_unordered_multiset object.
Definition: concurrent_unordered_set.h:1011
concurrent_unordered_set< _Key_type, _Hasher, _Key_equality, _Allocator_type > _Mytype
Definition: concurrent_unordered_set.h:102
_Traits::value_type value_type
Definition: internal_concurrent_hash.h:97
iterator insert(_Valty &&_Value)
Adds elements to the concurrent_unordered_multiset object.
Definition: concurrent_unordered_set.h:1098
allocator_type::reference reference
Definition: internal_concurrent_hash.h:102
_Key_type key_type
Definition: concurrent_unordered_set.h:42
iterator unsafe_erase(const_iterator _Where)
Removes elements from the concurrent_unordered_set at specified positions. This method is not concurr...
Definition: concurrent_unordered_set.h:574
_Mybase::const_iterator const_local_iterator
The type of a constant bucket iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:194
allocator_type::pointer pointer
Definition: internal_concurrent_hash.h:100
details::_Concurrent_hash< details::_Concurrent_unordered_set_traits< _Key_type, _Key_compare, _Allocator_type, true > > _Mybase
Definition: concurrent_unordered_set.h:698
concurrent_unordered_multiset< _Key_type, _Hasher, _Key_equality, _Allocator_type > _Mytype
Definition: concurrent_unordered_set.h:696
std::pair< iterator, bool > insert(_Valty &&_Value)
Adds elements to the concurrent_unordered_set object.
Definition: concurrent_unordered_set.h:513
concurrent_unordered_multiset(_Iterator _First, _Iterator _Last, size_type _Number_of_buckets=8, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &_Allocator=allocator_type())
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:877
iterator unsafe_erase(const_iterator _Where)
Removes elements from the concurrent_unordered_multiset at specified positions. This method is not co...
Definition: concurrent_unordered_set.h:1156
concurrent_unordered_set(const concurrent_unordered_set &_Uset, const allocator_type &_Allocator)
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:333
concurrent_unordered_set & operator=(const concurrent_unordered_set &_Uset)
Assigns the contents of another concurrent_unordered_set object to this one. This method is not concu...
Definition: concurrent_unordered_set.h:371
_Mybase::allocator_type allocator_type
The type of an allocator for managing storage.
Definition: concurrent_unordered_set.h:134
size_type unsafe_erase(const key_type &_Keyval)
Removes elements from the concurrent_unordered_multiset at specified positions. This method is not co...
Definition: concurrent_unordered_set.h:1206
std::enable_if<!std::is_same< const_iterator, typename std::remove_reference< _Valty >::type >::value, iterator >::type insert(const_iterator _Where, _Valty &&_Value)
Adds elements to the concurrent_unordered_set object.
Definition: concurrent_unordered_set.h:550
concurrent_unordered_set(const concurrent_unordered_set &_Uset)
Constructs a concurrent unordered set.
Definition: concurrent_unordered_set.h:310
allocator_type::difference_type difference_type
Definition: internal_concurrent_hash.h:106
_Hasher hasher
The type of the hash function.
Definition: concurrent_unordered_set.h:716
_Mybase::pointer pointer
The type of a pointer to an element.
Definition: concurrent_unordered_set.h:140
_Mybase::pointer pointer
The type of a pointer to an element.
Definition: concurrent_unordered_set.h:734
allocator_type::const_reference const_reference
Definition: internal_concurrent_hash.h:103
_Key_type key_type
The type of an ordering key.
Definition: concurrent_unordered_set.h:704
iterator insert(const_iterator _Where, const value_type &_Value)
Adds elements to the concurrent_unordered_set object.
Definition: concurrent_unordered_set.h:450
_Mybase::const_iterator const_iterator
The type of a constant iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:776
void swap(concurrent_unordered_set &_Uset)
Swaps the contents of two concurrent_unordered_set objects. This method is not concurrency-safe.
Definition: concurrent_unordered_set.h:635
concurrent_unordered_multiset & operator=(const concurrent_unordered_multiset &_Uset)
Assigns the contents of another concurrent_unordered_multiset object to this one. This method is not ...
Definition: concurrent_unordered_set.h:965
static const _Key_type & _Key_function(const value_type &_Value)
Definition: concurrent_unordered_set.h:62
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
allocator_type::size_type size_type
Definition: internal_concurrent_hash.h:105
iterator unsafe_erase(const_iterator _First, const_iterator _Last)
Removes elements from the concurrent_unordered_set at specified positions. This method is not concurr...
Definition: concurrent_unordered_set.h:623
_Mybase::value_type value_type
The type of an element.
Definition: concurrent_unordered_set.h:116
concurrent_unordered_multiset(const allocator_type &_Allocator)
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:838
_Hasher hasher
The type of the hash function.
Definition: concurrent_unordered_set.h:122
key_equal key_eq() const
Returns the stored equality comparison function object.
Definition: concurrent_unordered_set.h:659
_Mybase::iterator local_iterator
The type of a bucket iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:188
key_equal key_eq() const
The stored equality comparison function object.
Definition: concurrent_unordered_set.h:1242
_Concurrent_hash & operator=(const _Concurrent_hash &_Right)
Definition: internal_concurrent_hash.h:148
_In_ int _Value
Definition: setjmp.h:173
_Key_compare _Value_compare
Definition: concurrent_unordered_set.h:60
_Mybase::const_pointer const_pointer
The type of a constant pointer to an element.
Definition: concurrent_unordered_set.h:146
_Traits::allocator_type allocator_type
Definition: internal_concurrent_hash.h:99
_FwdIt _Last
Definition: algorithm:1936
_Mybase::const_iterator const_local_iterator
The type of a constant bucket iterator for the controlled sequence.
Definition: concurrent_unordered_set.h:788
concurrent_unordered_multiset(size_type _Number_of_buckets=8, const hasher &_Hasher=hasher(), const key_equal &_Key_equality=key_equal(), const allocator_type &_Allocator=allocator_type())
Constructs a concurrent unordered multiset.
Definition: concurrent_unordered_set.h:815
The concurrent_unordered_set class is an concurrency-safe container that controls a varying-length se...
Definition: concurrent_unordered_set.h:98