Anode handle - это объект, который принимает владение одним элементом изassociative container илиunordered associative container. Его можно использовать для передачи этого владения другому контейнеру с совместимыми узлами. Контейнеры с совместимыми узлами имеют одинаковый тип дескриптора узла. Элементы могут передаваться в любом направлении между типами контейнеров в одной строке таблицы89.
map<K, T, C1, A> | map<K, T, C2, A> |
map<K, T, C1, A> | multimap<K, T, C2, A> |
set<K, C1, A> | set<K, C2, A> |
set<K, C1, A> | multiset<K, C2, A> |
unordered_map<K, T, H1, E1, A> | unordered_map<K, T, H2, E2, A> |
unordered_map<K, T, H1, E1, A> | unordered_multimap<K, T, H2, E2, A> |
unordered_set<K, H1, E1, A> | unordered_set<K, H2, E2, A> |
unordered_set<K, H1, E1, A> | unordered_multiset<K, H2, E2, A> |
Если дескриптор узла не пустой, то он содержит распределитель, равный распределителю контейнера, когда элемент был извлечен. Если дескриптор узла пуст, он не содержит распределителя.
Классnode_handle предназначен только для экспозиции. Реализации разрешено предоставлять эквивалентную функциональность без предоставления класса с этим именем.
Если определенная пользователем специализацияpair существует для pair<const Key, T> илиpair<Key, T>, гдеKey - контейнер,key_type аT - контейнер mapped_type, поведение операций, связанных с дескрипторами узлов, не определено.
template<unspecified> class node_handle { public: // These type declarations are described in Tables 90 and 91. using value_type = see below; // not present for map containers using key_type = see below; // not present for set containers using mapped_type = see below; // not present for set containers using allocator_type = see below; private: using container_node_type = unspecified; using ator_traits = allocator_traits<allocator_type>; typename ator_traits::rebind_traits<container_node_type>::pointer ptr_; optional<allocator_type> alloc_; public: constexpr node_handle() noexcept : ptr_(), alloc_() {} ~node_handle(); node_handle(node_handle&&) noexcept; node_handle& operator=(node_handle&&); value_type& value() const; // not present for map containers key_type& key() const; // not present for set containers mapped_type& mapped() const; // not present for set containers allocator_type get_allocator() const; explicit operator bool() const noexcept; bool empty() const noexcept; void swap(node_handle&) noexcept(ator_traits::propagate_on_container_swap::value || ator_traits::is_always_equal::value); friend void swap(node_handle& x, node_handle& y) noexcept(noexcept(x.swap(y))) { x.swap(y); } };
node_handle(node_handle&& nh) noexcept;
Effects: Создаетnode_handle объект, инициализируемый ptr_ с помощьюnh.ptr_. Перемещайте конструкцииalloc_ с помощью nh.alloc_. Назначаетnullptr кnh.ptr_ и правопреемникам nullopt кnh.alloc_.
node_handle& operator=(node_handle&& nh);
Requires: Либо!alloc_, либо ator_traits::propagate_on_container_move_assignment естьtrue, либоalloc_ == nh.alloc_.
Effects:
Еслиptr_ != nullptrуничтожаетvalue_type подобъект вcontainer_node_type объекте, на который указываетptr_ вызовator_traits::destroy, затем освобождает егоptr_ путем вызоваator_traits::rebind_traits<container_node_type>::deallocate.
Назначаетnh.ptr_ вptr_.
Если!alloc_ илиator_traits::propagate_on_container_move_assignment естьtrue, move назначаетnh.alloc_ наalloc_.
Назначает nullptr кnh.ptr_ и правопреемникамnullopt к nh.alloc_.
~node_handle();
value_type& value() const;
Returns: Ссылка наvalue_type подобъект в container_node_type объекте, на который указываетptr_.
key_type& key() const;
Returns: Неконстантная ссылка наkey_type член value_type подобъекта вcontainer_node_type объекте, на который указываетptr_.
mapped_type& mapped() const;
Returns: Ссылка наmapped_type член value_type подобъекта вcontainer_node_type объекте, на который указываетptr_.
allocator_type get_allocator() const;
explicit operator bool() const noexcept;
bool empty() const noexcept;
void swap(node_handle& nh)
noexcept(ator_traits::propagate_on_container_swap::value ||
ator_traits::is_always_equal::value);
Requires:!alloc_, или!nh.alloc_, или ator_traits::propagate_on_container_swap естьtrue, илиalloc_ == nh.alloc_.