Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
concurrent_unordered_map.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2005-2019 Intel Corporation
3 
4  Licensed under the Apache License, Version 2.0 (the "License");
5  you may not use this file except in compliance with the License.
6  You may obtain a copy of the License at
7 
8  http://www.apache.org/licenses/LICENSE-2.0
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 
16 
17 
18 
19 */
20 
21 /* Container implementations in this header are based on PPL implementations
22  provided by Microsoft. */
23 
24 #ifndef __TBB_concurrent_unordered_map_H
25 #define __TBB_concurrent_unordered_map_H
26 
29 
30 namespace tbb
31 {
32 
33 namespace interface5 {
34 
35 // Template class for hash map traits
36 template<typename Key, typename T, typename Hash_compare, typename Allocator, bool Allow_multimapping>
38 {
39 protected:
40  typedef std::pair<const Key, T> value_type;
41  typedef Key key_type;
42  typedef Hash_compare hash_compare;
44 
45  enum { allow_multimapping = Allow_multimapping };
46 
48  concurrent_unordered_map_traits(const hash_compare& hc) : my_hash_compare(hc) {}
49 
50  template<class Type1, class Type2>
51  static const Key& get_key(const std::pair<Type1, Type2>& value) {
52  return (value.first);
53  }
54 
55  hash_compare my_hash_compare; // the comparator predicate for keys
56 };
57 
58 template <typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,
59  typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >
61  public internal::concurrent_unordered_base< concurrent_unordered_map_traits<Key, T,
62  internal::hash_compare<Key, Hasher, Key_equality>, Allocator, false> >
63 {
64  // Base type definitions
65  typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
67  typedef internal::concurrent_unordered_base< traits_type > base_type;
68 #if __TBB_EXTRA_DEBUG
69 public:
70 #endif
71  using traits_type::allow_multimapping;
72 public:
73  using base_type::end;
74  using base_type::find;
75  using base_type::insert;
76 
77  // Type definitions
78  typedef Key key_type;
79  typedef typename base_type::value_type value_type;
80  typedef T mapped_type;
81  typedef Hasher hasher;
82  typedef Key_equality key_equal;
83  typedef hash_compare key_compare;
84 
85  typedef typename base_type::allocator_type allocator_type;
86  typedef typename base_type::pointer pointer;
87  typedef typename base_type::const_pointer const_pointer;
88  typedef typename base_type::reference reference;
89  typedef typename base_type::const_reference const_reference;
90 
91  typedef typename base_type::size_type size_type;
92  typedef typename base_type::difference_type difference_type;
93 
94  typedef typename base_type::iterator iterator;
95  typedef typename base_type::const_iterator const_iterator;
96  typedef typename base_type::iterator local_iterator;
97  typedef typename base_type::const_iterator const_local_iterator;
98 
99  // Construction/destruction/copying
100  explicit concurrent_unordered_map(size_type n_of_buckets = base_type::initial_bucket_number,
101  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
102  const allocator_type& a = allocator_type())
103  : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
104  {}
105 
106  concurrent_unordered_map(size_type n_of_buckets, const allocator_type& a)
107  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
108  {}
109 
110  concurrent_unordered_map(size_type n_of_buckets, const hasher& a_hasher, const allocator_type& a)
111  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
112  {}
113 
114  explicit concurrent_unordered_map(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
115  {}
116 
117  template <typename Iterator>
118  concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,
119  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
120  const allocator_type& a = allocator_type())
121  : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
122  {
123  insert(first, last);
124  }
125 
126  template <typename Iterator>
127  concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type& a)
128  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
129  {
130  insert(first, last);
131  }
132 
133  template <typename Iterator>
134  concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets, const hasher& a_hasher,
135  const allocator_type& a)
136  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
137  {
138  insert(first, last);
139  }
140 
141 #if __TBB_INITIALIZER_LISTS_PRESENT
142  concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,
144  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
145  const allocator_type& a = allocator_type())
146  : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
147  {
148  insert(il.begin(),il.end());
149  }
150 
151  concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets, const allocator_type& a)
152  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
153  {
154  insert(il.begin(), il.end());
155  }
156 
157  concurrent_unordered_map(std::initializer_list<value_type> il, size_type n_of_buckets, const hasher& a_hasher,
158  const allocator_type& a)
159  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
160  {
161  insert(il.begin(), il.end());
162  }
163 
164 #endif //# __TBB_INITIALIZER_LISTS_PRESENT
165 
166 #if __TBB_CPP11_RVALUE_REF_PRESENT
167 #if !__TBB_IMPLICIT_MOVE_PRESENT
169  : base_type(table)
170  {}
171 
172  concurrent_unordered_map& operator=(const concurrent_unordered_map& table)
173  {
174  return static_cast<concurrent_unordered_map&>(base_type::operator=(table));
175  }
176 
177  concurrent_unordered_map(concurrent_unordered_map&& table)
178  : base_type(std::move(table))
179  {}
180 
181  concurrent_unordered_map& operator=(concurrent_unordered_map&& table)
182  {
183  return static_cast<concurrent_unordered_map&>(base_type::operator=(std::move(table)));
184  }
185 #endif
186 
187  concurrent_unordered_map(concurrent_unordered_map&& table, const Allocator& a) : base_type(std::move(table), a)
188  {}
189 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
190 
191  concurrent_unordered_map(const concurrent_unordered_map& table, const Allocator& a)
192  : base_type(table, a)
193  {}
194 
195  // Observers
196  mapped_type& operator[](const key_type& key)
197  {
198  iterator where = find(key);
199 
200  if (where == end())
201  {
202  where = insert(std::pair<key_type, mapped_type>(key, mapped_type())).first;
203  }
204 
205  return ((*where).second);
206  }
207 
208  mapped_type& at(const key_type& key)
209  {
210  iterator where = find(key);
211 
212  if (where == end())
213  {
215  }
216 
217  return ((*where).second);
218  }
219 
220  const mapped_type& at(const key_type& key) const
221  {
222  const_iterator where = find(key);
223 
224  if (where == end())
225  {
227  }
228 
229  return ((*where).second);
230  }
231 };
232 
233 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT
234 
235 namespace internal {
236 using namespace tbb::internal;
237 
238 template<template<typename...> typename Map, typename Key, typename Element, typename... Args>
239 using cu_map_t = Map<
240  Key, Element,
241  std::conditional_t< (sizeof...(Args)>0) && !is_allocator_v< pack_element_t<0, Args...> >,
242  pack_element_t<0, Args...>, tbb_hash<Key> >,
243  std::conditional_t< (sizeof...(Args)>1) && !is_allocator_v< pack_element_t<1, Args...> >,
244  pack_element_t<1, Args...>, std::equal_to<Key> >,
245  std::conditional_t< (sizeof...(Args)>0) && is_allocator_v< pack_element_t<sizeof...(Args)-1, Args...> >,
246  pack_element_t<sizeof...(Args)-1, Args...>, tbb_allocator<std::pair<const Key, Element> > >
247 >;
248 }
249 
250 // Deduction guide for the constructor from two iterators
251 template<typename I>
253 -> internal::cu_map_t<concurrent_unordered_map, internal::iterator_key_t<I>, internal::iterator_mapped_t<I>>;
254 
255 // Deduction guide for the constructor from two iterators and hasher/equality/allocator
256 template<typename I, typename... Args>
257 concurrent_unordered_map(I, I, size_t, Args...)
258 -> internal::cu_map_t<concurrent_unordered_map, internal::iterator_key_t<I>, internal::iterator_mapped_t<I>, Args...>;
259 
260 // Deduction guide for the constructor from an initializer_list
261 template<typename Key, typename Element>
262 concurrent_unordered_map(std::initializer_list<std::pair<const Key, Element>>)
263 -> internal::cu_map_t<concurrent_unordered_map, Key, Element>;
264 
265 // Deduction guide for the constructor from an initializer_list and hasher/equality/allocator
266 template<typename Key, typename Element, typename... Args>
267 concurrent_unordered_map(std::initializer_list<std::pair<const Key, Element>>, size_t, Args...)
268 -> internal::cu_map_t<concurrent_unordered_map, Key, Element, Args...>;
269 
270 #endif /* __TBB_CPP17_DEDUCTION_GUIDES_PRESENT */
271 
272 template < typename Key, typename T, typename Hasher = tbb::tbb_hash<Key>, typename Key_equality = std::equal_to<Key>,
273  typename Allocator = tbb::tbb_allocator<std::pair<const Key, T> > >
275  public internal::concurrent_unordered_base< concurrent_unordered_map_traits< Key, T,
276  internal::hash_compare<Key, Hasher, Key_equality>, Allocator, true> >
277 {
278  // Base type definitions
279  typedef internal::hash_compare<Key, Hasher, Key_equality> hash_compare;
281  typedef internal::concurrent_unordered_base<traits_type> base_type;
282 #if __TBB_EXTRA_DEBUG
283 public:
284 #endif
285  using traits_type::allow_multimapping;
286 public:
287  using base_type::insert;
288 
289  // Type definitions
290  typedef Key key_type;
291  typedef typename base_type::value_type value_type;
292  typedef T mapped_type;
293  typedef Hasher hasher;
294  typedef Key_equality key_equal;
295  typedef hash_compare key_compare;
296 
297  typedef typename base_type::allocator_type allocator_type;
298  typedef typename base_type::pointer pointer;
299  typedef typename base_type::const_pointer const_pointer;
300  typedef typename base_type::reference reference;
301  typedef typename base_type::const_reference const_reference;
302 
303  typedef typename base_type::size_type size_type;
304  typedef typename base_type::difference_type difference_type;
305 
306  typedef typename base_type::iterator iterator;
307  typedef typename base_type::const_iterator const_iterator;
308  typedef typename base_type::iterator local_iterator;
309  typedef typename base_type::const_iterator const_local_iterator;
310 
311  // Construction/destruction/copying
312  explicit concurrent_unordered_multimap(size_type n_of_buckets = base_type::initial_bucket_number,
313  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
314  const allocator_type& a = allocator_type())
315  : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
316  {}
317 
318  concurrent_unordered_multimap(size_type n_of_buckets, const allocator_type& a)
319  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
320  {}
321 
322  concurrent_unordered_multimap(size_type n_of_buckets, const hasher& a_hasher, const allocator_type& a)
323  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
324  {}
325 
326  explicit concurrent_unordered_multimap(const Allocator& a) : base_type(base_type::initial_bucket_number, key_compare(), a)
327  {}
328 
329  template <typename Iterator>
330  concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets = base_type::initial_bucket_number,
331  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
332  const allocator_type& a = allocator_type())
333  : base_type(n_of_buckets,key_compare(a_hasher,a_keyeq), a)
334  {
335  insert(first, last);
336  }
337 
338  template <typename Iterator>
339  concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type& a)
340  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
341  {
342  insert(first, last);
343  }
344 
345  template <typename Iterator>
346  concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets, const hasher& a_hasher,
347  const allocator_type& a)
348  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
349  {
350  insert(first, last);
351  }
352 
353 #if __TBB_INITIALIZER_LISTS_PRESENT
354  concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets = base_type::initial_bucket_number,
356  const hasher& a_hasher = hasher(), const key_equal& a_keyeq = key_equal(),
357  const allocator_type& a = allocator_type())
358  : base_type(n_of_buckets, key_compare(a_hasher, a_keyeq), a)
359  {
360  insert(il.begin(),il.end());
361  }
362 
363  concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets, const allocator_type& a)
364  : base_type(n_of_buckets, key_compare(hasher(), key_equal()), a)
365  {
366  insert(il.begin(), il.end());
367  }
368 
369  concurrent_unordered_multimap(std::initializer_list<value_type> il, size_type n_of_buckets, const hasher& a_hasher,
370  const allocator_type& a)
371  : base_type(n_of_buckets, key_compare(a_hasher, key_equal()), a)
372  {
373  insert(il.begin(), il.end());
374  }
375 
376 #endif //# __TBB_INITIALIZER_LISTS_PRESENT
377 
378 #if __TBB_CPP11_RVALUE_REF_PRESENT
379 #if !__TBB_IMPLICIT_MOVE_PRESENT
381  : base_type(table)
382  {}
383 
384  concurrent_unordered_multimap& operator=(const concurrent_unordered_multimap& table)
385  {
386  return static_cast<concurrent_unordered_multimap&>(base_type::operator=(table));
387  }
388 
389  concurrent_unordered_multimap(concurrent_unordered_multimap&& table)
390  : base_type(std::move(table))
391  {}
392 
393  concurrent_unordered_multimap& operator=(concurrent_unordered_multimap&& table)
394  {
395  return static_cast<concurrent_unordered_multimap&>(base_type::operator=(std::move(table)));
396  }
397 #endif
398 
399  concurrent_unordered_multimap(concurrent_unordered_multimap&& table, const Allocator& a) : base_type(std::move(table), a)
400  {}
401 #endif //__TBB_CPP11_RVALUE_REF_PRESENT
402 
403  concurrent_unordered_multimap(const concurrent_unordered_multimap& table, const Allocator& a)
404  : base_type(table, a)
405  {}
406 };
407 
408 #if __TBB_CPP17_DEDUCTION_GUIDES_PRESENT
409 
410 // Deduction guide for the constructor from two iterators
411 template<typename I>
413 -> internal::cu_map_t<concurrent_unordered_multimap, internal::iterator_key_t<I>, internal::iterator_mapped_t<I>>;
414 
415 // Deduction guide for the constructor from two iterators and hasher/equality/allocator
416 template<typename I, typename... Args>
417 concurrent_unordered_multimap(I, I, size_t, Args...)
418 -> internal::cu_map_t<concurrent_unordered_multimap, internal::iterator_key_t<I>, internal::iterator_mapped_t<I>, Args...>;
419 
420 // Deduction guide for the constructor from an initializer_list
421 template<typename Key, typename Element>
422 concurrent_unordered_multimap(std::initializer_list<std::pair<const Key, Element>>)
423 -> internal::cu_map_t<concurrent_unordered_multimap, Key, Element>;
424 
425 // Deduction guide for the constructor from an initializer_list and hasher/equality/allocator
426 template<typename Key, typename Element, typename... Args>
427 concurrent_unordered_multimap(std::initializer_list<std::pair<const Key, Element>>, size_t, Args...)
428 -> internal::cu_map_t<concurrent_unordered_multimap, Key, Element, Args...>;
429 
430 #endif /* __TBB_CPP17_DEDUCTION_GUIDES_PRESENT */
431 } // namespace interface5
432 
435 
436 } // namespace tbb
437 
438 #endif// __TBB_concurrent_unordered_map_H
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
internal::hash_compare< Key, Hasher, Key_equality > hash_compare
concurrent_unordered_map_traits< Key, T, hash_compare, Allocator, true > traits_type
concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
concurrent_unordered_multimap(size_type n_of_buckets, const allocator_type &a)
concurrent_unordered_map(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
concurrent_unordered_multimap(std::initializer_list< value_type > il, size_type n_of_buckets, const allocator_type &a)
concurrent_unordered_map(size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
concurrent_unordered_map(std::initializer_list< value_type > il, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
concurrent_unordered_multimap(concurrent_unordered_multimap &&table, const Allocator &a)
__TBB_IMPLICIT_MOVE_PRESENT
auto first(Container &c) -> decltype(begin(c))
mapped_type & operator[](const key_type &key)
concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type &a)
concurrent_unordered_multimap(size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
concurrent_unordered_map(concurrent_unordered_map &&table, const Allocator &a)
__TBB_IMPLICIT_MOVE_PRESENT
static const Key & get_key(const std::pair< Type1, Type2 > &value)
internal::concurrent_unordered_base< traits_type > base_type
const mapped_type & at(const key_type &key) const
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
concurrent_unordered_multimap(std::initializer_list< value_type > il, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
auto last(Container &c) -> decltype(begin(c))
concurrent_unordered_map(const concurrent_unordered_map &table, const Allocator &a)
tbb::internal::allocator_rebind< Allocator, value_type >::type allocator_type
concurrent_unordered_map(size_type n_of_buckets, const allocator_type &a)
The graph class.
concurrent_unordered_multimap(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets, const hasher &a_hasher, const allocator_type &a)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle * key
allocator_traits< Alloc >::template rebind_alloc< T >::other type
concurrent_unordered_multimap(size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
void move(tbb_thread &t1, tbb_thread &t2)
Definition: tbb_thread.h:309
internal::hash_compare< Key, Hasher, Key_equality > hash_compare
STL namespace.
concurrent_unordered_multimap(const concurrent_unordered_multimap &table, const Allocator &a)
concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets, const allocator_type &a)
concurrent_unordered_map_traits< Key, T, hash_compare, Allocator, false > traits_type
internal::concurrent_unordered_base< traits_type > base_type
concurrent_unordered_map(Iterator first, Iterator last, size_type n_of_buckets=base_type::initial_bucket_number, const hasher &a_hasher=hasher(), const key_equal &a_keyeq=key_equal(), const allocator_type &a=allocator_type())
Identifiers declared inside namespace internal should never be used directly by client code...
Definition: atomic.h:55
concurrent_unordered_map(std::initializer_list< value_type > il, size_type n_of_buckets, const allocator_type &a)
Meets "allocator" requirements of ISO C++ Standard, Section 20.1.5.
Definition: tbb_allocator.h:62

Copyright © 2005-2019 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.