aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/libcxx/include/unordered_set
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/libcxx/include/unordered_set')
-rw-r--r--contrib/llvm-project/libcxx/include/unordered_set1953
1 files changed, 894 insertions, 1059 deletions
diff --git a/contrib/llvm-project/libcxx/include/unordered_set b/contrib/llvm-project/libcxx/include/unordered_set
index 4f78bfde11af..6414885f4c51 100644
--- a/contrib/llvm-project/libcxx/include/unordered_set
+++ b/contrib/llvm-project/libcxx/include/unordered_set
@@ -575,1388 +575,1222 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Value, class _Hash, class _Pred, class _Alloc>
class unordered_multiset;
-template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>,
- class _Alloc = allocator<_Value> >
-class _LIBCPP_TEMPLATE_VIS unordered_set
-{
+template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>, class _Alloc = allocator<_Value> >
+class _LIBCPP_TEMPLATE_VIS unordered_set {
public:
- // types
- typedef _Value key_type;
- typedef key_type value_type;
- typedef __type_identity_t<_Hash> hasher;
- typedef __type_identity_t<_Pred> key_equal;
- typedef __type_identity_t<_Alloc> allocator_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- static_assert((is_same<value_type, typename allocator_type::value_type>::value),
- "Allocator::value_type must be same type as value_type");
+ // types
+ typedef _Value key_type;
+ typedef key_type value_type;
+ typedef __type_identity_t<_Hash> hasher;
+ typedef __type_identity_t<_Pred> key_equal;
+ typedef __type_identity_t<_Alloc> allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ static_assert((is_same<value_type, typename allocator_type::value_type>::value),
+ "Allocator::value_type must be same type as value_type");
+
+ static_assert(is_same<allocator_type, __rebind_alloc<allocator_traits<allocator_type>, value_type> >::value,
+ "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
+ "original allocator");
- static_assert(is_same<allocator_type, __rebind_alloc<allocator_traits<allocator_type>, value_type> >::value,
- "[allocator.requirements] states that rebinding an allocator to the same type should result in the "
- "original allocator");
-
- private:
- typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
+private:
+ typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
- __table __table_;
+ __table __table_;
public:
- typedef typename __table::pointer pointer;
- typedef typename __table::const_pointer const_pointer;
- typedef typename __table::size_type size_type;
- typedef typename __table::difference_type difference_type;
+ typedef typename __table::pointer pointer;
+ typedef typename __table::const_pointer const_pointer;
+ typedef typename __table::size_type size_type;
+ typedef typename __table::difference_type difference_type;
- typedef typename __table::const_iterator iterator;
- typedef typename __table::const_iterator const_iterator;
- typedef typename __table::const_local_iterator local_iterator;
- typedef typename __table::const_local_iterator const_local_iterator;
+ typedef typename __table::const_iterator iterator;
+ typedef typename __table::const_iterator const_iterator;
+ typedef typename __table::const_local_iterator local_iterator;
+ typedef typename __table::const_local_iterator const_local_iterator;
#if _LIBCPP_STD_VER >= 17
- typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
- typedef __insert_return_type<iterator, node_type> insert_return_type;
+ typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
+ typedef __insert_return_type<iterator, node_type> insert_return_type;
#endif
- template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS unordered_set;
- template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS unordered_multiset;
+ template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS unordered_set;
+ template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS unordered_multiset;
- _LIBCPP_HIDE_FROM_ABI
- unordered_set()
- _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
- {
- }
- explicit _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
+ _LIBCPP_HIDE_FROM_ABI unordered_set() _NOEXCEPT_(is_nothrow_default_constructible<__table>::value) {}
+ explicit _LIBCPP_HIDE_FROM_ABI
+ unordered_set(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal());
#if _LIBCPP_STD_VER >= 14
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_set(size_type __n, const allocator_type& __a)
- : unordered_set(__n, hasher(), key_equal(), __a) {}
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_set(size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_set(__n, __hf, key_equal(), __a) {}
+ inline _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const allocator_type& __a)
+ : unordered_set(__n, hasher(), key_equal(), __a) {}
+ inline _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_set(__n, __hf, key_equal(), __a) {}
#endif
- _LIBCPP_HIDE_FROM_ABI unordered_set(size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a);
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_set(_InputIterator __first, _InputIterator __last);
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_set(_InputIterator __first, _InputIterator __last,
- size_type __n, const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_set(_InputIterator __first, _InputIterator __last,
- size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_set(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a);
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_set(_InputIterator __first, _InputIterator __last);
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_set(_InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal());
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_set(
+ _InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a);
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_set(from_range_t, _Range&& __range, size_type __n = /*implementation-defined*/0,
- const hasher& __hf = hasher(), const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
- : __table_(__hf, __eql, __a) {
- if (__n > 0) {
- __table_.__rehash_unique(__n);
- }
- insert_range(std::forward<_Range>(__range));
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI unordered_set(
+ from_range_t,
+ _Range&& __range,
+ size_type __n = /*implementation-defined*/ 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : __table_(__hf, __eql, __a) {
+ if (__n > 0) {
+ __table_.__rehash_unique(__n);
}
+ insert_range(std::forward<_Range>(__range));
+ }
#endif
#if _LIBCPP_STD_VER >= 14
- template <class _InputIterator>
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_set(_InputIterator __first, _InputIterator __last,
- size_type __n, const allocator_type& __a)
- : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) {}
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_set(_InputIterator __first, _InputIterator __last,
- size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_set(__first, __last, __n, __hf, key_equal(), __a) {}
+ template <class _InputIterator>
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_set(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a)
+ : unordered_set(__first, __last, __n, hasher(), key_equal(), __a) {}
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_set(
+ _InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_set(__first, __last, __n, __hf, key_equal(), __a) {}
#endif
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_set(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
- : unordered_set(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
-
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_set(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_set(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI unordered_set(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
+ : unordered_set(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
+
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_set(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_set(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
#endif
- _LIBCPP_HIDE_FROM_ABI
- explicit unordered_set(const allocator_type& __a);
- _LIBCPP_HIDE_FROM_ABI unordered_set(const unordered_set& __u);
- _LIBCPP_HIDE_FROM_ABI unordered_set(const unordered_set& __u, const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI explicit unordered_set(const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI unordered_set(const unordered_set& __u);
+ _LIBCPP_HIDE_FROM_ABI unordered_set(const unordered_set& __u, const allocator_type& __a);
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- unordered_set(unordered_set&& __u)
- _NOEXCEPT_(is_nothrow_move_constructible<__table>::value);
- _LIBCPP_HIDE_FROM_ABI unordered_set(unordered_set&& __u, const allocator_type& __a);
- _LIBCPP_HIDE_FROM_ABI unordered_set(initializer_list<value_type> __il);
- _LIBCPP_HIDE_FROM_ABI unordered_set(initializer_list<value_type> __il, size_type __n,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
- _LIBCPP_HIDE_FROM_ABI unordered_set(initializer_list<value_type> __il, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a);
-#if _LIBCPP_STD_VER >= 14
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_set(initializer_list<value_type> __il, size_type __n,
- const allocator_type& __a)
- : unordered_set(__il, __n, hasher(), key_equal(), __a) {}
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_set(initializer_list<value_type> __il, size_type __n,
- const hasher& __hf, const allocator_type& __a)
- : unordered_set(__il, __n, __hf, key_equal(), __a) {}
-#endif
+ _LIBCPP_HIDE_FROM_ABI unordered_set(unordered_set&& __u) _NOEXCEPT_(is_nothrow_move_constructible<__table>::value);
+ _LIBCPP_HIDE_FROM_ABI unordered_set(unordered_set&& __u, const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI unordered_set(initializer_list<value_type> __il);
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_set(initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal());
+ _LIBCPP_HIDE_FROM_ABI unordered_set(
+ initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a);
+# if _LIBCPP_STD_VER >= 14
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_set(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
+ : unordered_set(__il, __n, hasher(), key_equal(), __a) {}
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_set(initializer_list<value_type> __il, size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_set(__il, __n, __hf, key_equal(), __a) {}
+# endif
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- ~unordered_set() {
- static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
- }
+ _LIBCPP_HIDE_FROM_ABI ~unordered_set() {
+ static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
+ }
- _LIBCPP_HIDE_FROM_ABI
- unordered_set& operator=(const unordered_set& __u)
- {
- __table_ = __u.__table_;
- return *this;
- }
+ _LIBCPP_HIDE_FROM_ABI unordered_set& operator=(const unordered_set& __u) {
+ __table_ = __u.__table_;
+ return *this;
+ }
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- unordered_set& operator=(unordered_set&& __u)
- _NOEXCEPT_(is_nothrow_move_assignable<__table>::value);
- _LIBCPP_HIDE_FROM_ABI
- unordered_set& operator=(initializer_list<value_type> __il);
+ _LIBCPP_HIDE_FROM_ABI unordered_set& operator=(unordered_set&& __u)
+ _NOEXCEPT_(is_nothrow_move_assignable<__table>::value);
+ _LIBCPP_HIDE_FROM_ABI unordered_set& operator=(initializer_list<value_type> __il);
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- allocator_type get_allocator() const _NOEXCEPT
- {return allocator_type(__table_.__node_alloc());}
-
- _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI
- bool empty() const _NOEXCEPT {return __table_.size() == 0;}
- _LIBCPP_HIDE_FROM_ABI
- size_type size() const _NOEXCEPT {return __table_.size();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_size() const _NOEXCEPT {return __table_.max_size();}
-
- _LIBCPP_HIDE_FROM_ABI
- iterator begin() _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- iterator end() _NOEXCEPT {return __table_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator begin() const _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator end() const _NOEXCEPT {return __table_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cbegin() const _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cend() const _NOEXCEPT {return __table_.end();}
+ _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT {
+ return allocator_type(__table_.__node_alloc());
+ }
-#ifndef _LIBCPP_CXX03_LANG
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> emplace(_Args&&... __args)
- {return __table_.__emplace_unique(std::forward<_Args>(__args)...);}
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace_hint(const_iterator, _Args&&... __args) {
- return __table_.__emplace_unique(std::forward<_Args>(__args)...).first;
- }
+ _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __table_.size() == 0; }
+ _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __table_.size(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __table_.max_size(); }
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> insert(value_type&& __x)
- {return __table_.__insert_unique(std::move(__x));}
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator, value_type&& __x) {
- return insert(std::move(__x)).first;
- }
+ _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __table_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __table_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return __table_.end(); }
- _LIBCPP_HIDE_FROM_ABI
- void insert(initializer_list<value_type> __il)
- {insert(__il.begin(), __il.end());}
+#ifndef _LIBCPP_CXX03_LANG
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> emplace(_Args&&... __args) {
+ return __table_.__emplace_unique(std::forward<_Args>(__args)...);
+ }
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator, _Args&&... __args) {
+ return __table_.__emplace_unique(std::forward<_Args>(__args)...).first;
+ }
+
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __x) {
+ return __table_.__insert_unique(std::move(__x));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, value_type&& __x) { return insert(std::move(__x)).first; }
+
+ _LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, bool> insert(const value_type& __x)
- {return __table_.__insert_unique(__x);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return __table_.__insert_unique(__x); }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator, const value_type& __x) {
- return insert(__x).first;
- }
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- void insert(_InputIterator __first, _InputIterator __last);
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x).first; }
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __first, _InputIterator __last);
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- void insert_range(_Range&& __range) {
- for (auto&& __element : __range) {
- __table_.__insert_unique(std::forward<decltype(__element)>(__element));
- }
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
+ for (auto&& __element : __range) {
+ __table_.__insert_unique(std::forward<decltype(__element)>(__element));
}
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __p) {return __table_.erase(__p);}
- _LIBCPP_HIDE_FROM_ABI
- size_type erase(const key_type& __k) {return __table_.__erase_unique(__k);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __first, const_iterator __last)
- {return __table_.erase(__first, __last);}
- _LIBCPP_HIDE_FROM_ABI
- void clear() _NOEXCEPT {__table_.clear();}
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p) { return __table_.erase(__p); }
+ _LIBCPP_HIDE_FROM_ABI size_type erase(const key_type& __k) { return __table_.__erase_unique(__k); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last) {
+ return __table_.erase(__first, __last);
+ }
+ _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __table_.clear(); }
#if _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI
- insert_return_type insert(node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to unordered_set::insert()");
- return __table_.template __node_handle_insert_unique<
- node_type, insert_return_type>(std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __h, node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to unordered_set::insert()");
- return __table_.template __node_handle_insert_unique<node_type>(
- __h, std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(key_type const& __key)
- {
- return __table_.template __node_handle_extract<node_type>(__key);
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(const_iterator __it)
- {
- return __table_.template __node_handle_extract<node_type>(__it);
- }
-
- template<class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_set<key_type, _H2, _P2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __table_.__node_handle_merge_unique(__source.__table_);
- }
- template<class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_set<key_type, _H2, _P2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __table_.__node_handle_merge_unique(__source.__table_);
- }
- template<class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __table_.__node_handle_merge_unique(__source.__table_);
- }
- template<class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- __table_.__node_handle_merge_unique(__source.__table_);
- }
+ _LIBCPP_HIDE_FROM_ABI insert_return_type insert(node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to unordered_set::insert()");
+ return __table_.template __node_handle_insert_unique< node_type, insert_return_type>(std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __h, node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to unordered_set::insert()");
+ return __table_.template __node_handle_insert_unique<node_type>(__h, std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
+ return __table_.template __node_handle_extract<node_type>(__key);
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
+ return __table_.template __node_handle_extract<node_type>(__it);
+ }
+
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_set<key_type, _H2, _P2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __table_.__node_handle_merge_unique(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_set<key_type, _H2, _P2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __table_.__node_handle_merge_unique(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __table_.__node_handle_merge_unique(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ __table_.__node_handle_merge_unique(__source.__table_);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- void swap(unordered_set& __u)
- _NOEXCEPT_(__is_nothrow_swappable<__table>::value)
- {__table_.swap(__u.__table_);}
+ _LIBCPP_HIDE_FROM_ABI void swap(unordered_set& __u) _NOEXCEPT_(__is_nothrow_swappable<__table>::value) {
+ __table_.swap(__u.__table_);
+ }
- _LIBCPP_HIDE_FROM_ABI
- hasher hash_function() const {return __table_.hash_function();}
- _LIBCPP_HIDE_FROM_ABI
- key_equal key_eq() const {return __table_.key_eq();}
+ _LIBCPP_HIDE_FROM_ABI hasher hash_function() const { return __table_.hash_function(); }
+ _LIBCPP_HIDE_FROM_ABI key_equal key_eq() const { return __table_.key_eq(); }
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const key_type& __k) {return __table_.find(__k);}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const key_type& __k) const {return __table_.find(__k);}
+ _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __table_.find(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __table_.find(__k); }
#if _LIBCPP_STD_VER >= 20
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const _K2& __k) {return __table_.find(__k);}
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const _K2& __k) const {return __table_.find(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
+ return __table_.find(__k);
+ }
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
+ return __table_.find(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const key_type& __k) const {return __table_.__count_unique(__k);}
+ _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __table_.__count_unique(__k); }
#if _LIBCPP_STD_VER >= 20
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const _K2& __k) const {return __table_.__count_unique(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
+ return __table_.__count_unique(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
#if _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const key_type& __k) const {return find(__k) != end();}
+ _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const _K2& __k) const {return find(__k) != end();}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
+ return find(__k) != end();
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, iterator> equal_range(const key_type& __k)
- {return __table_.__equal_range_unique(__k);}
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
- {return __table_.__equal_range_unique(__k);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
+ return __table_.__equal_range_unique(__k);
+ }
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
+ return __table_.__equal_range_unique(__k);
+ }
#if _LIBCPP_STD_VER >= 20
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, iterator> equal_range(const _K2& __k)
- {return __table_.__equal_range_unique(__k);}
- template <class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator, const_iterator> equal_range(const _K2& __k) const
- {return __table_.__equal_range_unique(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
+ return __table_.__equal_range_unique(__k);
+ }
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
+ return __table_.__equal_range_unique(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket_count() const _NOEXCEPT {return __table_.bucket_count();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_bucket_count() const _NOEXCEPT {return __table_.max_bucket_count();}
-
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket_size(size_type __n) const {return __table_.bucket_size(__n);}
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket(const key_type& __k) const {return __table_.bucket(__k);}
-
- _LIBCPP_HIDE_FROM_ABI
- local_iterator begin(size_type __n) {return __table_.begin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- local_iterator end(size_type __n) {return __table_.end(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator begin(size_type __n) const {return __table_.cbegin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator end(size_type __n) const {return __table_.cend(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator cbegin(size_type __n) const {return __table_.cbegin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator cend(size_type __n) const {return __table_.cend(__n);}
-
- _LIBCPP_HIDE_FROM_ABI
- float load_factor() const _NOEXCEPT {return __table_.load_factor();}
- _LIBCPP_HIDE_FROM_ABI
- float max_load_factor() const _NOEXCEPT {return __table_.max_load_factor();}
- _LIBCPP_HIDE_FROM_ABI
- void max_load_factor(float __mlf) {__table_.max_load_factor(__mlf);}
- _LIBCPP_HIDE_FROM_ABI
- void rehash(size_type __n) {__table_.__rehash_unique(__n);}
- _LIBCPP_HIDE_FROM_ABI
- void reserve(size_type __n) {__table_.__reserve_unique(__n);}
+ _LIBCPP_HIDE_FROM_ABI size_type bucket_count() const _NOEXCEPT { return __table_.bucket_count(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_bucket_count() const _NOEXCEPT { return __table_.max_bucket_count(); }
+
+ _LIBCPP_HIDE_FROM_ABI size_type bucket_size(size_type __n) const { return __table_.bucket_size(__n); }
+ _LIBCPP_HIDE_FROM_ABI size_type bucket(const key_type& __k) const { return __table_.bucket(__k); }
+
+ _LIBCPP_HIDE_FROM_ABI local_iterator begin(size_type __n) { return __table_.begin(__n); }
+ _LIBCPP_HIDE_FROM_ABI local_iterator end(size_type __n) { return __table_.end(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator begin(size_type __n) const { return __table_.cbegin(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator end(size_type __n) const { return __table_.cend(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator cbegin(size_type __n) const { return __table_.cbegin(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator cend(size_type __n) const { return __table_.cend(__n); }
+
+ _LIBCPP_HIDE_FROM_ABI float load_factor() const _NOEXCEPT { return __table_.load_factor(); }
+ _LIBCPP_HIDE_FROM_ABI float max_load_factor() const _NOEXCEPT { return __table_.max_load_factor(); }
+ _LIBCPP_HIDE_FROM_ABI void max_load_factor(float __mlf) { __table_.max_load_factor(__mlf); }
+ _LIBCPP_HIDE_FROM_ABI void rehash(size_type __n) { __table_.__rehash_unique(__n); }
+ _LIBCPP_HIDE_FROM_ABI void reserve(size_type __n) { __table_.__reserve_unique(__n); }
};
#if _LIBCPP_STD_VER >= 17
-template<class _InputIterator,
- class _Hash = hash<__iter_value_type<_InputIterator>>,
- class _Pred = equal_to<__iter_value_type<_InputIterator>>,
- class _Allocator = allocator<__iter_value_type<_InputIterator>>,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_set(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_set<__iter_value_type<_InputIterator>, _Hash, _Pred, _Allocator>;
-
-#if _LIBCPP_STD_VER >= 23
+template <class _InputIterator,
+ class _Hash = hash<__iter_value_type<_InputIterator>>,
+ class _Pred = equal_to<__iter_value_type<_InputIterator>>,
+ class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_set(_InputIterator,
+ _InputIterator,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator()) -> unordered_set<__iter_value_type<_InputIterator>, _Hash, _Pred, _Allocator>;
+
+# if _LIBCPP_STD_VER >= 23
template <ranges::input_range _Range,
- class _Hash = hash<ranges::range_value_t<_Range>>,
- class _Pred = equal_to<ranges::range_value_t<_Range>>,
+ class _Hash = hash<ranges::range_value_t<_Range>>,
+ class _Pred = equal_to<ranges::range_value_t<_Range>>,
class _Allocator = allocator<ranges::range_value_t<_Range>>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_set(from_range_t,
+ _Range&&,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator())
+ -> unordered_set<ranges::range_value_t<_Range>, _Hash, _Pred, _Allocator>; // C++23
+# endif
+
+template <class _Tp,
+ class _Hash = hash<_Tp>,
+ class _Pred = equal_to<_Tp>,
+ class _Allocator = allocator<_Tp>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_set(initializer_list<_Tp>,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator()) -> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
+
+template <class _InputIterator,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_set(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
+ -> unordered_set<__iter_value_type<_InputIterator>,
+ hash<__iter_value_type<_InputIterator>>,
+ equal_to<__iter_value_type<_InputIterator>>,
+ _Allocator>;
+
+template <class _InputIterator,
+ class _Hash,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_set(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_set<ranges::range_value_t<_Range>, _Hash, _Pred, _Allocator>; // C++23
-#endif
-
-template<class _Tp, class _Hash = hash<_Tp>,
- class _Pred = equal_to<_Tp>,
- class _Allocator = allocator<_Tp>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_set(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_set<_Tp, _Hash, _Pred, _Allocator>;
-
-template<class _InputIterator, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_set(_InputIterator, _InputIterator,
- typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_set<__iter_value_type<_InputIterator>,
- hash<__iter_value_type<_InputIterator>>,
- equal_to<__iter_value_type<_InputIterator>>,
- _Allocator>;
-
-template<class _InputIterator, class _Hash, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_set(_InputIterator, _InputIterator,
- typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
- -> unordered_set<__iter_value_type<_InputIterator>, _Hash,
- equal_to<__iter_value_type<_InputIterator>>,
- _Allocator>;
+unordered_set(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
+ -> unordered_set<__iter_value_type<_InputIterator>, _Hash, equal_to<__iter_value_type<_InputIterator>>, _Allocator>;
-#if _LIBCPP_STD_VER >= 23
+# if _LIBCPP_STD_VER >= 23
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_set<ranges::range_value_t<_Range>, hash<ranges::range_value_t<_Range>>,
- equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_set<ranges::range_value_t<_Range>,
+ hash<ranges::range_value_t<_Range>>,
+ equal_to<ranges::range_value_t<_Range>>,
+ _Allocator>;
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(from_range_t, _Range&&, _Allocator)
- -> unordered_set<ranges::range_value_t<_Range>, hash<ranges::range_value_t<_Range>>,
- equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_set<ranges::range_value_t<_Range>,
+ hash<ranges::range_value_t<_Range>>,
+ equal_to<ranges::range_value_t<_Range>>,
+ _Allocator>;
-template <ranges::input_range _Range, class _Hash, class _Allocator,
+template <ranges::input_range _Range,
+ class _Hash,
+ class _Allocator,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
- -> unordered_set<ranges::range_value_t<_Range>, _Hash, equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_set<ranges::range_value_t<_Range>, _Hash, equal_to<ranges::range_value_t<_Range>>, _Allocator>;
-#endif
+# endif
-template<class _Tp, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
+ -> unordered_set<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
-template<class _Tp, class _Hash, class _Allocator,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <class _Tp,
+ class _Hash,
+ class _Allocator,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_set(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
- -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
+ -> unordered_set<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
#endif
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(size_type __n,
- const hasher& __hf, const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_unique(__n);
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_unique(__n);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(size_type __n,
- const hasher& __hf, const key_equal& __eql, const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_unique(__n);
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
+ size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_unique(__n);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- _InputIterator __first, _InputIterator __last)
-{
- insert(__first, __last);
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(_InputIterator __first, _InputIterator __last) {
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- _InputIterator __first, _InputIterator __last, size_type __n,
- const hasher& __hf, const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_unique(__n);
- insert(__first, __last);
+ _InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_unique(__n);
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- _InputIterator __first, _InputIterator __last, size_type __n,
- const hasher& __hf, const key_equal& __eql, const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_unique(__n);
- insert(__first, __last);
+ _InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_unique(__n);
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- const allocator_type& __a)
- : __table_(__a)
-{
-}
+inline unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(const allocator_type& __a) : __table_(__a) {}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- const unordered_set& __u)
- : __table_(__u.__table_)
-{
- __table_.__rehash_unique(__u.bucket_count());
- insert(__u.begin(), __u.end());
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(const unordered_set& __u) : __table_(__u.__table_) {
+ __table_.__rehash_unique(__u.bucket_count());
+ insert(__u.begin(), __u.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- const unordered_set& __u, const allocator_type& __a)
- : __table_(__u.__table_, __a)
-{
- __table_.__rehash_unique(__u.bucket_count());
- insert(__u.begin(), __u.end());
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(const unordered_set& __u, const allocator_type& __a)
+ : __table_(__u.__table_, __a) {
+ __table_.__rehash_unique(__u.bucket_count());
+ insert(__u.begin(), __u.end());
}
#ifndef _LIBCPP_CXX03_LANG
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- unordered_set&& __u)
+inline unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(unordered_set&& __u)
_NOEXCEPT_(is_nothrow_move_constructible<__table>::value)
- : __table_(std::move(__u.__table_))
-{
-}
+ : __table_(std::move(__u.__table_)) {}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- unordered_set&& __u, const allocator_type& __a)
- : __table_(std::move(__u.__table_), __a)
-{
- if (__a != __u.get_allocator())
- {
- iterator __i = __u.begin();
- while (__u.size() != 0)
- __table_.__insert_unique(std::move(__u.__table_.remove(__i++)->__get_value()));
- }
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(unordered_set&& __u, const allocator_type& __a)
+ : __table_(std::move(__u.__table_), __a) {
+ if (__a != __u.get_allocator()) {
+ iterator __i = __u.begin();
+ while (__u.size() != 0)
+ __table_.__insert_unique(std::move(__u.__table_.remove(__i++)->__get_value()));
+ }
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- initializer_list<value_type> __il)
-{
- insert(__il.begin(), __il.end());
+unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(initializer_list<value_type> __il) {
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- initializer_list<value_type> __il, size_type __n, const hasher& __hf,
- const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_unique(__n);
- insert(__il.begin(), __il.end());
+ initializer_list<value_type> __il, size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_unique(__n);
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(
- initializer_list<value_type> __il, size_type __n, const hasher& __hf,
- const key_equal& __eql, const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_unique(__n);
- insert(__il.begin(), __il.end());
+ initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_unique(__n);
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_set<_Value, _Hash, _Pred, _Alloc>&
+inline unordered_set<_Value, _Hash, _Pred, _Alloc>&
unordered_set<_Value, _Hash, _Pred, _Alloc>::operator=(unordered_set&& __u)
- _NOEXCEPT_(is_nothrow_move_assignable<__table>::value)
-{
- __table_ = std::move(__u.__table_);
- return *this;
+ _NOEXCEPT_(is_nothrow_move_assignable<__table>::value) {
+ __table_ = std::move(__u.__table_);
+ return *this;
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_set<_Value, _Hash, _Pred, _Alloc>&
-unordered_set<_Value, _Hash, _Pred, _Alloc>::operator=(
- initializer_list<value_type> __il)
-{
- __table_.__assign_unique(__il.begin(), __il.end());
- return *this;
+inline unordered_set<_Value, _Hash, _Pred, _Alloc>&
+unordered_set<_Value, _Hash, _Pred, _Alloc>::operator=(initializer_list<value_type> __il) {
+ __table_.__assign_unique(__il.begin(), __il.end());
+ return *this;
}
#endif // _LIBCPP_CXX03_LANG
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
-inline
-void
-unordered_set<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first,
- _InputIterator __last)
-{
- for (; __first != __last; ++__first)
- __table_.__insert_unique(*__first);
+inline void unordered_set<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
+ for (; __first != __last; ++__first)
+ __table_.__insert_unique(*__first);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline _LIBCPP_HIDE_FROM_ABI
-void
-swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
- unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
- _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
-{
- __x.swap(__y);
+inline _LIBCPP_HIDE_FROM_ABI void
+swap(unordered_set<_Value, _Hash, _Pred, _Alloc>& __x, unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
+ __x.swap(__y);
}
#if _LIBCPP_STD_VER >= 20
-template <class _Value, class _Hash, class _Pred, class _Alloc,
- class _Predicate>
-inline _LIBCPP_HIDE_FROM_ABI
- typename unordered_set<_Value, _Hash, _Pred, _Alloc>::size_type
- erase_if(unordered_set<_Value, _Hash, _Pred, _Alloc>& __c,
- _Predicate __pred) {
+template <class _Value, class _Hash, class _Pred, class _Alloc, class _Predicate>
+inline _LIBCPP_HIDE_FROM_ABI typename unordered_set<_Value, _Hash, _Pred, _Alloc>::size_type
+erase_if(unordered_set<_Value, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) {
return std::__libcpp_erase_if_container(__c, __pred);
}
#endif
template <class _Value, class _Hash, class _Pred, class _Alloc>
-_LIBCPP_HIDE_FROM_ABI bool
-operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
- const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
-{
- if (__x.size() != __y.size())
- return false;
- typedef typename unordered_set<_Value, _Hash, _Pred, _Alloc>::const_iterator
- const_iterator;
- for (const_iterator __i = __x.begin(), __ex = __x.end(), __ey = __y.end();
- __i != __ex; ++__i)
- {
- const_iterator __j = __y.find(*__i);
- if (__j == __ey || !(*__i == *__j))
- return false;
- }
- return true;
+_LIBCPP_HIDE_FROM_ABI bool operator==(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
+ const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) {
+ if (__x.size() != __y.size())
+ return false;
+ typedef typename unordered_set<_Value, _Hash, _Pred, _Alloc>::const_iterator const_iterator;
+ for (const_iterator __i = __x.begin(), __ex = __x.end(), __ey = __y.end(); __i != __ex; ++__i) {
+ const_iterator __j = __y.find(*__i);
+ if (__j == __ey || !(*__i == *__j))
+ return false;
+ }
+ return true;
}
#if _LIBCPP_STD_VER <= 17
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
- const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y)
-{
- return !(__x == __y);
+inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const unordered_set<_Value, _Hash, _Pred, _Alloc>& __x,
+ const unordered_set<_Value, _Hash, _Pred, _Alloc>& __y) {
+ return !(__x == __y);
}
#endif
-template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>,
- class _Alloc = allocator<_Value> >
-class _LIBCPP_TEMPLATE_VIS unordered_multiset
-{
+template <class _Value, class _Hash = hash<_Value>, class _Pred = equal_to<_Value>, class _Alloc = allocator<_Value> >
+class _LIBCPP_TEMPLATE_VIS unordered_multiset {
public:
- // types
- typedef _Value key_type;
- typedef key_type value_type;
- typedef __type_identity_t<_Hash> hasher;
- typedef __type_identity_t<_Pred> key_equal;
- typedef __type_identity_t<_Alloc> allocator_type;
- typedef value_type& reference;
- typedef const value_type& const_reference;
- static_assert((is_same<value_type, typename allocator_type::value_type>::value),
- "Allocator::value_type must be same type as value_type");
+ // types
+ typedef _Value key_type;
+ typedef key_type value_type;
+ typedef __type_identity_t<_Hash> hasher;
+ typedef __type_identity_t<_Pred> key_equal;
+ typedef __type_identity_t<_Alloc> allocator_type;
+ typedef value_type& reference;
+ typedef const value_type& const_reference;
+ static_assert((is_same<value_type, typename allocator_type::value_type>::value),
+ "Allocator::value_type must be same type as value_type");
private:
- typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
+ typedef __hash_table<value_type, hasher, key_equal, allocator_type> __table;
- __table __table_;
+ __table __table_;
public:
- typedef typename __table::pointer pointer;
- typedef typename __table::const_pointer const_pointer;
- typedef typename __table::size_type size_type;
- typedef typename __table::difference_type difference_type;
+ typedef typename __table::pointer pointer;
+ typedef typename __table::const_pointer const_pointer;
+ typedef typename __table::size_type size_type;
+ typedef typename __table::difference_type difference_type;
- typedef typename __table::const_iterator iterator;
- typedef typename __table::const_iterator const_iterator;
- typedef typename __table::const_local_iterator local_iterator;
- typedef typename __table::const_local_iterator const_local_iterator;
+ typedef typename __table::const_iterator iterator;
+ typedef typename __table::const_iterator const_iterator;
+ typedef typename __table::const_local_iterator local_iterator;
+ typedef typename __table::const_local_iterator const_local_iterator;
#if _LIBCPP_STD_VER >= 17
- typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
+ typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
#endif
- template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS unordered_set;
- template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
- friend class _LIBCPP_TEMPLATE_VIS unordered_multiset;
+ template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS unordered_set;
+ template <class _Value2, class _Hash2, class _Pred2, class _Alloc2>
+ friend class _LIBCPP_TEMPLATE_VIS unordered_multiset;
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset()
- _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
- {
- }
- explicit _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const hasher& __hf,
- const key_equal& __eql, const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset() _NOEXCEPT_(is_nothrow_default_constructible<__table>::value) {}
+ explicit _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(size_type __n, const hasher& __hf = hasher(), const key_equal& __eql = key_equal());
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a);
#if _LIBCPP_STD_VER >= 14
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(size_type __n, const allocator_type& __a)
- : unordered_multiset(__n, hasher(), key_equal(), __a) {}
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_multiset(__n, __hf, key_equal(), __a) {}
+ inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const allocator_type& __a)
+ : unordered_multiset(__n, hasher(), key_equal(), __a) {}
+ inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_multiset(__n, __hf, key_equal(), __a) {}
#endif
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(_InputIterator __first, _InputIterator __last);
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(_InputIterator __first, _InputIterator __last,
- size_type __n, const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(_InputIterator __first, _InputIterator __last,
- size_type __n , const hasher& __hf,
- const key_equal& __eql, const allocator_type& __a);
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(_InputIterator __first, _InputIterator __last);
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ _InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal());
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ _InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a);
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(from_range_t, _Range&& __range, size_type __n = /*implementation-defined*/0,
- const hasher& __hf = hasher(), const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
- : __table_(__hf, __eql, __a) {
- if (__n > 0) {
- __table_.__rehash_multi(__n);
- }
- insert_range(std::forward<_Range>(__range));
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ from_range_t,
+ _Range&& __range,
+ size_type __n = /*implementation-defined*/ 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : __table_(__hf, __eql, __a) {
+ if (__n > 0) {
+ __table_.__rehash_multi(__n);
}
+ insert_range(std::forward<_Range>(__range));
+ }
#endif
#if _LIBCPP_STD_VER >= 14
- template <class _InputIterator>
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(_InputIterator __first, _InputIterator __last,
- size_type __n, const allocator_type& __a)
- : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) {}
- template <class _InputIterator>
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(_InputIterator __first, _InputIterator __last,
- size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) {}
+ template <class _InputIterator>
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(_InputIterator __first, _InputIterator __last, size_type __n, const allocator_type& __a)
+ : unordered_multiset(__first, __last, __n, hasher(), key_equal(), __a) {}
+ template <class _InputIterator>
+ inline _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ _InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_multiset(__first, __last, __n, __hf, key_equal(), __a) {}
#endif
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
- : unordered_multiset(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
-
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
- : unordered_multiset(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(from_range_t, _Range&& __range, size_type __n, const allocator_type& __a)
+ : unordered_multiset(from_range, std::forward<_Range>(__range), __n, hasher(), key_equal(), __a) {}
+
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(from_range_t, _Range&& __range, size_type __n, const hasher& __hf, const allocator_type& __a)
+ : unordered_multiset(from_range, std::forward<_Range>(__range), __n, __hf, key_equal(), __a) {}
#endif
- _LIBCPP_HIDE_FROM_ABI
- explicit unordered_multiset(const allocator_type& __a);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(const unordered_multiset& __u);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(const unordered_multiset& __u, const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI explicit unordered_multiset(const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(const unordered_multiset& __u);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(const unordered_multiset& __u, const allocator_type& __a);
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(unordered_multiset&& __u)
- _NOEXCEPT_(is_nothrow_move_constructible<__table>::value);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(unordered_multiset&& __u, const allocator_type& __a);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(initializer_list<value_type> __il);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(initializer_list<value_type> __il, size_type __n,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal());
- _LIBCPP_HIDE_FROM_ABI unordered_multiset(initializer_list<value_type> __il, size_type __n,
- const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a);
-#if _LIBCPP_STD_VER >= 14
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(unordered_multiset&& __u)
+ _NOEXCEPT_(is_nothrow_move_constructible<__table>::value);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(unordered_multiset&& __u, const allocator_type& __a);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(initializer_list<value_type> __il);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal());
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset(
+ initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a);
+# if _LIBCPP_STD_VER >= 14
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(initializer_list<value_type> __il, size_type __n, const allocator_type& __a)
: unordered_multiset(__il, __n, hasher(), key_equal(), __a) {}
- inline _LIBCPP_HIDE_FROM_ABI
- unordered_multiset(initializer_list<value_type> __il, size_type __n, const hasher& __hf, const allocator_type& __a)
+ inline _LIBCPP_HIDE_FROM_ABI
+ unordered_multiset(initializer_list<value_type> __il, size_type __n, const hasher& __hf, const allocator_type& __a)
: unordered_multiset(__il, __n, __hf, key_equal(), __a) {}
-#endif
+# endif
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- ~unordered_multiset() {
- static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
- }
+ _LIBCPP_HIDE_FROM_ABI ~unordered_multiset() {
+ static_assert(sizeof(std::__diagnose_unordered_container_requirements<_Value, _Hash, _Pred>(0)), "");
+ }
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset& operator=(const unordered_multiset& __u)
- {
- __table_ = __u.__table_;
- return *this;
- }
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset& operator=(const unordered_multiset& __u) {
+ __table_ = __u.__table_;
+ return *this;
+ }
#ifndef _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- unordered_multiset& operator=(unordered_multiset&& __u)
- _NOEXCEPT_(is_nothrow_move_assignable<__table>::value);
- _LIBCPP_HIDE_FROM_ABI unordered_multiset& operator=(initializer_list<value_type> __il);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset& operator=(unordered_multiset&& __u)
+ _NOEXCEPT_(is_nothrow_move_assignable<__table>::value);
+ _LIBCPP_HIDE_FROM_ABI unordered_multiset& operator=(initializer_list<value_type> __il);
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- allocator_type get_allocator() const _NOEXCEPT
- {return allocator_type(__table_.__node_alloc());}
-
- _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI
- bool empty() const _NOEXCEPT {return __table_.size() == 0;}
- _LIBCPP_HIDE_FROM_ABI
- size_type size() const _NOEXCEPT {return __table_.size();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_size() const _NOEXCEPT {return __table_.max_size();}
-
- _LIBCPP_HIDE_FROM_ABI
- iterator begin() _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- iterator end() _NOEXCEPT {return __table_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator begin() const _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator end() const _NOEXCEPT {return __table_.end();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cbegin() const _NOEXCEPT {return __table_.begin();}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator cend() const _NOEXCEPT {return __table_.end();}
+ _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT {
+ return allocator_type(__table_.__node_alloc());
+ }
+
+ _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __table_.size() == 0; }
+ _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __table_.size(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __table_.max_size(); }
+
+ _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __table_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __table_.end(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return __table_.begin(); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return __table_.end(); }
#ifndef _LIBCPP_CXX03_LANG
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace(_Args&&... __args)
- {return __table_.__emplace_multi(std::forward<_Args>(__args)...);}
- template <class... _Args>
- _LIBCPP_HIDE_FROM_ABI
- iterator emplace_hint(const_iterator __p, _Args&&... __args)
- {return __table_.__emplace_hint_multi(__p, std::forward<_Args>(__args)...);}
-
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(value_type&& __x) {return __table_.__insert_multi(std::move(__x));}
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __p, value_type&& __x)
- {return __table_.__insert_multi(__p, std::move(__x));}
- _LIBCPP_HIDE_FROM_ABI
- void insert(initializer_list<value_type> __il)
- {insert(__il.begin(), __il.end());}
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace(_Args&&... __args) {
+ return __table_.__emplace_multi(std::forward<_Args>(__args)...);
+ }
+ template <class... _Args>
+ _LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __p, _Args&&... __args) {
+ return __table_.__emplace_hint_multi(__p, std::forward<_Args>(__args)...);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __x) { return __table_.__insert_multi(std::move(__x)); }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __x) {
+ return __table_.__insert_multi(__p, std::move(__x));
+ }
+ _LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
#endif // _LIBCPP_CXX03_LANG
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const value_type& __x) {return __table_.__insert_multi(__x);}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__insert_multi(__x); }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __p, const value_type& __x)
- {return __table_.__insert_multi(__p, __x);}
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __x) {
+ return __table_.__insert_multi(__p, __x);
+ }
- template <class _InputIterator>
- _LIBCPP_HIDE_FROM_ABI
- void insert(_InputIterator __first, _InputIterator __last);
+ template <class _InputIterator>
+ _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __first, _InputIterator __last);
#if _LIBCPP_STD_VER >= 23
- template <_ContainerCompatibleRange<value_type> _Range>
- _LIBCPP_HIDE_FROM_ABI
- void insert_range(_Range&& __range) {
- for (auto&& __element : __range) {
- __table_.__insert_multi(std::forward<decltype(__element)>(__element));
- }
+ template <_ContainerCompatibleRange<value_type> _Range>
+ _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
+ for (auto&& __element : __range) {
+ __table_.__insert_multi(std::forward<decltype(__element)>(__element));
}
+ }
#endif
#if _LIBCPP_STD_VER >= 17
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to unordered_multiset::insert()");
- return __table_.template __node_handle_insert_multi<node_type>(
- std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- iterator insert(const_iterator __hint, node_type&& __nh)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
- "node_type with incompatible allocator passed to unordered_multiset::insert()");
- return __table_.template __node_handle_insert_multi<node_type>(
- __hint, std::move(__nh));
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(const_iterator __position)
- {
- return __table_.template __node_handle_extract<node_type>(
- __position);
- }
- _LIBCPP_HIDE_FROM_ABI
- node_type extract(key_type const& __key)
- {
- return __table_.template __node_handle_extract<node_type>(__key);
- }
-
- template <class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __table_.__node_handle_merge_multi(__source.__table_);
- }
- template <class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __table_.__node_handle_merge_multi(__source.__table_);
- }
- template <class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_set<key_type, _H2, _P2, allocator_type>& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __table_.__node_handle_merge_multi(__source.__table_);
- }
- template <class _H2, class _P2>
- _LIBCPP_HIDE_FROM_ABI
- void merge(unordered_set<key_type, _H2, _P2, allocator_type>&& __source)
- {
- _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__source.get_allocator() == get_allocator(),
- "merging container with incompatible allocator");
- return __table_.__node_handle_merge_multi(__source.__table_);
- }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to unordered_multiset::insert()");
+ return __table_.template __node_handle_insert_multi<node_type>(std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __hint, node_type&& __nh) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(__nh.empty() || __nh.get_allocator() == get_allocator(),
+ "node_type with incompatible allocator passed to unordered_multiset::insert()");
+ return __table_.template __node_handle_insert_multi<node_type>(__hint, std::move(__nh));
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __position) {
+ return __table_.template __node_handle_extract<node_type>(__position);
+ }
+ _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
+ return __table_.template __node_handle_extract<node_type>(__key);
+ }
+
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __table_.__node_handle_merge_multi(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_multiset<key_type, _H2, _P2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __table_.__node_handle_merge_multi(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_set<key_type, _H2, _P2, allocator_type>& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __table_.__node_handle_merge_multi(__source.__table_);
+ }
+ template <class _H2, class _P2>
+ _LIBCPP_HIDE_FROM_ABI void merge(unordered_set<key_type, _H2, _P2, allocator_type>&& __source) {
+ _LIBCPP_ASSERT_COMPATIBLE_ALLOCATOR(
+ __source.get_allocator() == get_allocator(), "merging container with incompatible allocator");
+ return __table_.__node_handle_merge_multi(__source.__table_);
+ }
#endif
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __p) {return __table_.erase(__p);}
- _LIBCPP_HIDE_FROM_ABI
- size_type erase(const key_type& __k) {return __table_.__erase_multi(__k);}
- _LIBCPP_HIDE_FROM_ABI
- iterator erase(const_iterator __first, const_iterator __last)
- {return __table_.erase(__first, __last);}
- _LIBCPP_HIDE_FROM_ABI
- void clear() _NOEXCEPT {__table_.clear();}
-
- _LIBCPP_HIDE_FROM_ABI
- void swap(unordered_multiset& __u)
- _NOEXCEPT_(__is_nothrow_swappable<__table>::value)
- {__table_.swap(__u.__table_);}
-
- _LIBCPP_HIDE_FROM_ABI
- hasher hash_function() const {return __table_.hash_function();}
- _LIBCPP_HIDE_FROM_ABI
- key_equal key_eq() const {return __table_.key_eq();}
-
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const key_type& __k) {return __table_.find(__k);}
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const key_type& __k) const {return __table_.find(__k);}
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __p) { return __table_.erase(__p); }
+ _LIBCPP_HIDE_FROM_ABI size_type erase(const key_type& __k) { return __table_.__erase_multi(__k); }
+ _LIBCPP_HIDE_FROM_ABI iterator erase(const_iterator __first, const_iterator __last) {
+ return __table_.erase(__first, __last);
+ }
+ _LIBCPP_HIDE_FROM_ABI void clear() _NOEXCEPT { __table_.clear(); }
+
+ _LIBCPP_HIDE_FROM_ABI void swap(unordered_multiset& __u) _NOEXCEPT_(__is_nothrow_swappable<__table>::value) {
+ __table_.swap(__u.__table_);
+ }
+
+ _LIBCPP_HIDE_FROM_ABI hasher hash_function() const { return __table_.hash_function(); }
+ _LIBCPP_HIDE_FROM_ABI key_equal key_eq() const { return __table_.key_eq(); }
+
+ _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __table_.find(__k); }
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __table_.find(__k); }
#if _LIBCPP_STD_VER >= 20
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- iterator find(const _K2& __k) {return __table_.find(__k);}
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- const_iterator find(const _K2& __k) const {return __table_.find(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
+ return __table_.find(__k);
+ }
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
+ return __table_.find(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const key_type& __k) const {return __table_.__count_multi(__k);}
+ _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __table_.__count_multi(__k); }
#if _LIBCPP_STD_VER >= 20
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- size_type count(const _K2& __k) const {return __table_.__count_multi(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
+ return __table_.__count_multi(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
#if _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const key_type& __k) const {return find(__k) != end();}
+ _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- bool contains(const _K2& __k) const {return find(__k) != end();}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
+ return find(__k) != end();
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, iterator> equal_range(const key_type& __k)
- {return __table_.__equal_range_multi(__k);}
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator, const_iterator> equal_range(const key_type& __k) const
- {return __table_.__equal_range_multi(__k);}
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
+ return __table_.__equal_range_multi(__k);
+ }
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
+ return __table_.__equal_range_multi(__k);
+ }
#if _LIBCPP_STD_VER >= 20
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- pair<iterator, iterator> equal_range(const _K2& __k)
- {return __table_.__equal_range_multi(__k);}
- template<class _K2, enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
- _LIBCPP_HIDE_FROM_ABI
- pair<const_iterator, const_iterator> equal_range(const _K2& __k) const
- {return __table_.__equal_range_multi(__k);}
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
+ return __table_.__equal_range_multi(__k);
+ }
+ template <class _K2,
+ enable_if_t<__is_transparent<hasher, _K2>::value && __is_transparent<key_equal, _K2>::value>* = nullptr>
+ _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
+ return __table_.__equal_range_multi(__k);
+ }
#endif // _LIBCPP_STD_VER >= 20
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket_count() const _NOEXCEPT {return __table_.bucket_count();}
- _LIBCPP_HIDE_FROM_ABI
- size_type max_bucket_count() const _NOEXCEPT {return __table_.max_bucket_count();}
-
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket_size(size_type __n) const {return __table_.bucket_size(__n);}
- _LIBCPP_HIDE_FROM_ABI
- size_type bucket(const key_type& __k) const {return __table_.bucket(__k);}
-
- _LIBCPP_HIDE_FROM_ABI
- local_iterator begin(size_type __n) {return __table_.begin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- local_iterator end(size_type __n) {return __table_.end(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator begin(size_type __n) const {return __table_.cbegin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator end(size_type __n) const {return __table_.cend(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator cbegin(size_type __n) const {return __table_.cbegin(__n);}
- _LIBCPP_HIDE_FROM_ABI
- const_local_iterator cend(size_type __n) const {return __table_.cend(__n);}
-
- _LIBCPP_HIDE_FROM_ABI
- float load_factor() const _NOEXCEPT {return __table_.load_factor();}
- _LIBCPP_HIDE_FROM_ABI
- float max_load_factor() const _NOEXCEPT {return __table_.max_load_factor();}
- _LIBCPP_HIDE_FROM_ABI
- void max_load_factor(float __mlf) {__table_.max_load_factor(__mlf);}
- _LIBCPP_HIDE_FROM_ABI
- void rehash(size_type __n) {__table_.__rehash_multi(__n);}
- _LIBCPP_HIDE_FROM_ABI
- void reserve(size_type __n) {__table_.__reserve_multi(__n);}
+ _LIBCPP_HIDE_FROM_ABI size_type bucket_count() const _NOEXCEPT { return __table_.bucket_count(); }
+ _LIBCPP_HIDE_FROM_ABI size_type max_bucket_count() const _NOEXCEPT { return __table_.max_bucket_count(); }
+
+ _LIBCPP_HIDE_FROM_ABI size_type bucket_size(size_type __n) const { return __table_.bucket_size(__n); }
+ _LIBCPP_HIDE_FROM_ABI size_type bucket(const key_type& __k) const { return __table_.bucket(__k); }
+
+ _LIBCPP_HIDE_FROM_ABI local_iterator begin(size_type __n) { return __table_.begin(__n); }
+ _LIBCPP_HIDE_FROM_ABI local_iterator end(size_type __n) { return __table_.end(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator begin(size_type __n) const { return __table_.cbegin(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator end(size_type __n) const { return __table_.cend(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator cbegin(size_type __n) const { return __table_.cbegin(__n); }
+ _LIBCPP_HIDE_FROM_ABI const_local_iterator cend(size_type __n) const { return __table_.cend(__n); }
+
+ _LIBCPP_HIDE_FROM_ABI float load_factor() const _NOEXCEPT { return __table_.load_factor(); }
+ _LIBCPP_HIDE_FROM_ABI float max_load_factor() const _NOEXCEPT { return __table_.max_load_factor(); }
+ _LIBCPP_HIDE_FROM_ABI void max_load_factor(float __mlf) { __table_.max_load_factor(__mlf); }
+ _LIBCPP_HIDE_FROM_ABI void rehash(size_type __n) { __table_.__rehash_multi(__n); }
+ _LIBCPP_HIDE_FROM_ABI void reserve(size_type __n) { __table_.__reserve_multi(__n); }
};
#if _LIBCPP_STD_VER >= 17
-template<class _InputIterator,
- class _Hash = hash<__iter_value_type<_InputIterator>>,
- class _Pred = equal_to<__iter_value_type<_InputIterator>>,
- class _Allocator = allocator<__iter_value_type<_InputIterator>>,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_multiset<__iter_value_type<_InputIterator>, _Hash, _Pred, _Allocator>;
-
-#if _LIBCPP_STD_VER >= 23
+template <class _InputIterator,
+ class _Hash = hash<__iter_value_type<_InputIterator>>,
+ class _Pred = equal_to<__iter_value_type<_InputIterator>>,
+ class _Allocator = allocator<__iter_value_type<_InputIterator>>,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_multiset(
+ _InputIterator,
+ _InputIterator,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator()) -> unordered_multiset<__iter_value_type<_InputIterator>, _Hash, _Pred, _Allocator>;
+
+# if _LIBCPP_STD_VER >= 23
template <ranges::input_range _Range,
- class _Hash = hash<ranges::range_value_t<_Range>>,
- class _Pred = equal_to<ranges::range_value_t<_Range>>,
+ class _Hash = hash<ranges::range_value_t<_Range>>,
+ class _Pred = equal_to<ranges::range_value_t<_Range>>,
class _Allocator = allocator<ranges::range_value_t<_Range>>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_multiset(
+ from_range_t,
+ _Range&&,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator()) -> unordered_multiset<ranges::range_value_t<_Range>, _Hash, _Pred, _Allocator>; // C++23
+# endif
+
+template <class _Tp,
+ class _Hash = hash<_Tp>,
+ class _Pred = equal_to<_Tp>,
+ class _Allocator = allocator<_Tp>,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<!__is_allocator<_Pred>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_multiset(initializer_list<_Tp>,
+ typename allocator_traits<_Allocator>::size_type = 0,
+ _Hash = _Hash(),
+ _Pred = _Pred(),
+ _Allocator = _Allocator()) -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
+
+template <class _InputIterator,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
+unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
+ -> unordered_multiset<__iter_value_type<_InputIterator>,
+ hash<__iter_value_type<_InputIterator>>,
+ equal_to<__iter_value_type<_InputIterator>>,
+ _Allocator>;
+
+template <class _InputIterator,
+ class _Hash,
+ class _Allocator,
+ class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_multiset(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_multiset<ranges::range_value_t<_Range>, _Hash, _Pred, _Allocator>; // C++23
-#endif
+unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
+ -> unordered_multiset<__iter_value_type<_InputIterator>,
+ _Hash,
+ equal_to<__iter_value_type<_InputIterator>>,
+ _Allocator>;
-template<class _Tp, class _Hash = hash<_Tp>,
- class _Pred = equal_to<_Tp>, class _Allocator = allocator<_Tp>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<!__is_allocator<_Pred>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_multiset(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type = 0,
- _Hash = _Hash(), _Pred = _Pred(), _Allocator = _Allocator())
- -> unordered_multiset<_Tp, _Hash, _Pred, _Allocator>;
-
-template<class _InputIterator, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_multiset<__iter_value_type<_InputIterator>,
- hash<__iter_value_type<_InputIterator>>,
- equal_to<__iter_value_type<_InputIterator>>,
- _Allocator>;
-
-template<class _InputIterator, class _Hash, class _Allocator,
- class = enable_if_t<__has_input_iterator_category<_InputIterator>::value>,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
-unordered_multiset(_InputIterator, _InputIterator, typename allocator_traits<_Allocator>::size_type,
- _Hash, _Allocator)
- -> unordered_multiset<__iter_value_type<_InputIterator>, _Hash,
- equal_to<__iter_value_type<_InputIterator>>,
- _Allocator>;
+# if _LIBCPP_STD_VER >= 23
-#if _LIBCPP_STD_VER >= 23
-
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_multiset<ranges::range_value_t<_Range>, hash<ranges::range_value_t<_Range>>,
- equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_multiset<ranges::range_value_t<_Range>,
+ hash<ranges::range_value_t<_Range>>,
+ equal_to<ranges::range_value_t<_Range>>,
+ _Allocator>;
-template <ranges::input_range _Range, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(from_range_t, _Range&&, _Allocator)
- -> unordered_multiset<ranges::range_value_t<_Range>, hash<ranges::range_value_t<_Range>>,
- equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_multiset<ranges::range_value_t<_Range>,
+ hash<ranges::range_value_t<_Range>>,
+ equal_to<ranges::range_value_t<_Range>>,
+ _Allocator>;
-template <ranges::input_range _Range, class _Hash, class _Allocator,
+template <ranges::input_range _Range,
+ class _Hash,
+ class _Allocator,
class = enable_if_t<!__is_allocator<_Hash>::value>,
class = enable_if_t<!is_integral<_Hash>::value>,
class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(from_range_t, _Range&&, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
- -> unordered_multiset<ranges::range_value_t<_Range>, _Hash, equal_to<ranges::range_value_t<_Range>>, _Allocator>;
+ -> unordered_multiset<ranges::range_value_t<_Range>, _Hash, equal_to<ranges::range_value_t<_Range>>, _Allocator>;
-#endif
+# endif
-template<class _Tp, class _Allocator,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type, _Allocator)
- -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
+ -> unordered_multiset<_Tp, hash<_Tp>, equal_to<_Tp>, _Allocator>;
-template<class _Tp, class _Hash, class _Allocator,
- class = enable_if_t<!__is_allocator<_Hash>::value>,
- class = enable_if_t<!is_integral<_Hash>::value>,
- class = enable_if_t<__is_allocator<_Allocator>::value>>
+template <class _Tp,
+ class _Hash,
+ class _Allocator,
+ class = enable_if_t<!__is_allocator<_Hash>::value>,
+ class = enable_if_t<!is_integral<_Hash>::value>,
+ class = enable_if_t<__is_allocator<_Allocator>::value>>
unordered_multiset(initializer_list<_Tp>, typename allocator_traits<_Allocator>::size_type, _Hash, _Allocator)
- -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
+ -> unordered_multiset<_Tp, _Hash, equal_to<_Tp>, _Allocator>;
#endif
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- size_type __n, const hasher& __hf, const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_multi(__n);
+ size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_multi(__n);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- size_type __n, const hasher& __hf, const key_equal& __eql,
- const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_multi(__n);
+ size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_multi(__n);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- _InputIterator __first, _InputIterator __last)
-{
- insert(__first, __last);
+unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(_InputIterator __first, _InputIterator __last) {
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- _InputIterator __first, _InputIterator __last, size_type __n,
- const hasher& __hf, const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_multi(__n);
- insert(__first, __last);
+ _InputIterator __first, _InputIterator __last, size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_multi(__n);
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- _InputIterator __first, _InputIterator __last, size_type __n,
- const hasher& __hf, const key_equal& __eql, const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_multi(__n);
- insert(__first, __last);
+ _InputIterator __first,
+ _InputIterator __last,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_multi(__n);
+ insert(__first, __last);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- const allocator_type& __a)
- : __table_(__a)
-{
-}
+inline unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(const allocator_type& __a)
+ : __table_(__a) {}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- const unordered_multiset& __u)
- : __table_(__u.__table_)
-{
- __table_.__rehash_multi(__u.bucket_count());
- insert(__u.begin(), __u.end());
+unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(const unordered_multiset& __u)
+ : __table_(__u.__table_) {
+ __table_.__rehash_multi(__u.bucket_count());
+ insert(__u.begin(), __u.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- const unordered_multiset& __u, const allocator_type& __a)
- : __table_(__u.__table_, __a)
-{
- __table_.__rehash_multi(__u.bucket_count());
- insert(__u.begin(), __u.end());
+ const unordered_multiset& __u, const allocator_type& __a)
+ : __table_(__u.__table_, __a) {
+ __table_.__rehash_multi(__u.bucket_count());
+ insert(__u.begin(), __u.end());
}
#ifndef _LIBCPP_CXX03_LANG
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- unordered_multiset&& __u)
+inline unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(unordered_multiset&& __u)
_NOEXCEPT_(is_nothrow_move_constructible<__table>::value)
- : __table_(std::move(__u.__table_))
-{
-}
+ : __table_(std::move(__u.__table_)) {}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- unordered_multiset&& __u, const allocator_type& __a)
- : __table_(std::move(__u.__table_), __a)
-{
- if (__a != __u.get_allocator())
- {
- iterator __i = __u.begin();
- while (__u.size() != 0)
- __table_.__insert_multi(std::move(__u.__table_.remove(__i++)->__get_value()));
- }
+ unordered_multiset&& __u, const allocator_type& __a)
+ : __table_(std::move(__u.__table_), __a) {
+ if (__a != __u.get_allocator()) {
+ iterator __i = __u.begin();
+ while (__u.size() != 0)
+ __table_.__insert_multi(std::move(__u.__table_.remove(__i++)->__get_value()));
+ }
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- initializer_list<value_type> __il)
-{
- insert(__il.begin(), __il.end());
+unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(initializer_list<value_type> __il) {
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- initializer_list<value_type> __il, size_type __n, const hasher& __hf,
- const key_equal& __eql)
- : __table_(__hf, __eql)
-{
- __table_.__rehash_multi(__n);
- insert(__il.begin(), __il.end());
+ initializer_list<value_type> __il, size_type __n, const hasher& __hf, const key_equal& __eql)
+ : __table_(__hf, __eql) {
+ __table_.__rehash_multi(__n);
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
- initializer_list<value_type> __il, size_type __n, const hasher& __hf,
- const key_equal& __eql, const allocator_type& __a)
- : __table_(__hf, __eql, __a)
-{
- __table_.__rehash_multi(__n);
- insert(__il.begin(), __il.end());
+ initializer_list<value_type> __il,
+ size_type __n,
+ const hasher& __hf,
+ const key_equal& __eql,
+ const allocator_type& __a)
+ : __table_(__hf, __eql, __a) {
+ __table_.__rehash_multi(__n);
+ insert(__il.begin(), __il.end());
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>&
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=(
- unordered_multiset&& __u)
- _NOEXCEPT_(is_nothrow_move_assignable<__table>::value)
-{
- __table_ = std::move(__u.__table_);
- return *this;
+inline unordered_multiset<_Value, _Hash, _Pred, _Alloc>&
+unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=(unordered_multiset&& __u)
+ _NOEXCEPT_(is_nothrow_move_assignable<__table>::value) {
+ __table_ = std::move(__u.__table_);
+ return *this;
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>&
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=(
- initializer_list<value_type> __il)
-{
- __table_.__assign_multi(__il.begin(), __il.end());
- return *this;
+inline unordered_multiset<_Value, _Hash, _Pred, _Alloc>&
+unordered_multiset<_Value, _Hash, _Pred, _Alloc>::operator=(initializer_list<value_type> __il) {
+ __table_.__assign_multi(__il.begin(), __il.end());
+ return *this;
}
#endif // _LIBCPP_CXX03_LANG
template <class _Value, class _Hash, class _Pred, class _Alloc>
template <class _InputIterator>
-inline
-void
-unordered_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first,
- _InputIterator __last)
-{
- for (; __first != __last; ++__first)
- __table_.__insert_multi(*__first);
+inline void unordered_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
+ for (; __first != __last; ++__first)
+ __table_.__insert_multi(*__first);
}
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline _LIBCPP_HIDE_FROM_ABI
-void
-swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
- unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
- _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y)))
-{
- __x.swap(__y);
+inline _LIBCPP_HIDE_FROM_ABI void
+swap(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x, unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
+ _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
+ __x.swap(__y);
}
#if _LIBCPP_STD_VER >= 20
-template <class _Value, class _Hash, class _Pred, class _Alloc,
- class _Predicate>
-inline _LIBCPP_HIDE_FROM_ABI
- typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::size_type
- erase_if(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __c,
- _Predicate __pred) {
+template <class _Value, class _Hash, class _Pred, class _Alloc, class _Predicate>
+inline _LIBCPP_HIDE_FROM_ABI typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::size_type
+erase_if(unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __c, _Predicate __pred) {
return std::__libcpp_erase_if_container(__c, __pred);
}
#endif
template <class _Value, class _Hash, class _Pred, class _Alloc>
-_LIBCPP_HIDE_FROM_ABI bool
-operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
- const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
-{
- if (__x.size() != __y.size())
- return false;
- typedef typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::const_iterator
- const_iterator;
- typedef pair<const_iterator, const_iterator> _EqRng;
- for (const_iterator __i = __x.begin(), __ex = __x.end(); __i != __ex;)
- {
- _EqRng __xeq = __x.equal_range(*__i);
- _EqRng __yeq = __y.equal_range(*__i);
- if (std::distance(__xeq.first, __xeq.second) !=
- std::distance(__yeq.first, __yeq.second) ||
- !std::is_permutation(__xeq.first, __xeq.second, __yeq.first))
- return false;
- __i = __xeq.second;
- }
- return true;
+_LIBCPP_HIDE_FROM_ABI bool operator==(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
+ const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) {
+ if (__x.size() != __y.size())
+ return false;
+ typedef typename unordered_multiset<_Value, _Hash, _Pred, _Alloc>::const_iterator const_iterator;
+ typedef pair<const_iterator, const_iterator> _EqRng;
+ for (const_iterator __i = __x.begin(), __ex = __x.end(); __i != __ex;) {
+ _EqRng __xeq = __x.equal_range(*__i);
+ _EqRng __yeq = __y.equal_range(*__i);
+ if (std::distance(__xeq.first, __xeq.second) != std::distance(__yeq.first, __yeq.second) ||
+ !std::is_permutation(__xeq.first, __xeq.second, __yeq.first))
+ return false;
+ __i = __xeq.second;
+ }
+ return true;
}
#if _LIBCPP_STD_VER <= 17
template <class _Value, class _Hash, class _Pred, class _Alloc>
-inline _LIBCPP_HIDE_FROM_ABI
-bool
-operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
- const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y)
-{
- return !(__x == __y);
+inline _LIBCPP_HIDE_FROM_ABI bool operator!=(const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __x,
+ const unordered_multiset<_Value, _Hash, _Pred, _Alloc>& __y) {
+ return !(__x == __y);
}
#endif
@@ -1970,7 +1804,8 @@ template <class _KeyT, class _HashT = std::hash<_KeyT>, class _PredT = std::equa
using unordered_set _LIBCPP_AVAILABILITY_PMR = std::unordered_set<_KeyT, _HashT, _PredT, polymorphic_allocator<_KeyT>>;
template <class _KeyT, class _HashT = std::hash<_KeyT>, class _PredT = std::equal_to<_KeyT>>
-using unordered_multiset _LIBCPP_AVAILABILITY_PMR = std::unordered_multiset<_KeyT, _HashT, _PredT, polymorphic_allocator<_KeyT>>;
+using unordered_multiset _LIBCPP_AVAILABILITY_PMR =
+ std::unordered_multiset<_KeyT, _HashT, _PredT, polymorphic_allocator<_KeyT>>;
} // namespace pmr
_LIBCPP_END_NAMESPACE_STD
#endif