# accessor and const_accessor

Member classes `concurrent_hash_map::accessor` and `concurrent_hash_map::const_accessor` are called accessors. Accessors allow multiple threads to concurrently access the key-value pairs in `concurrent_hash_map`. An accessor is called empty if it does not point to any item.

## `accessor` member class

Member class `concurrent_hash_map::accessor` provides read-write access to the key-value pair in `concurrent_hash_map`.

    namespace oneapi {
        namespace tbb {

            template <typename Key, typename T, typename HashCompare, typename Allocator>
            class concurrent_hash_map<Key, T, HashCompare, Allocator>::accessor {
                using value_type = std::pair<const Key, T>;

                accessor();
                ~accessor();

                bool empty() const;
                value_type& operator*() const;
                value_type* operator->() const;

                void release();
            }; // class accessor

        } // namespace tbb
    } // namespace oneapi

## `const_accessor` member class

Member class `concurrent_hash_map::const_accessor` provides read only access to the key-value pair in `concurrent_hash_map`.

    namespace oneapi {
        namespace tbb {

            template <typename Key, typename T, typename HashCompare, typename Allocator>
            class concurrent_hash_map<Key, T, HashCompare, Allocator>::const_accessor {
                using value_type = const std::pair<const Key, T>;

                const_accessor();
                ~const_accessor();

                bool empty() const;
                value_type& operator*() const;
                value_type* operator->() const;

                void release();
            }; // class const_accessor

        } // namespace tbb
    } // namespace oneapi

## Member functions

### Construction and destruction

>     accessor();

>     const_accessor();

> Constructs an empty accessor.

>     ~accessor();

>     ~const_accessor();

> Destroys the accessor. If `*this` is not empty, releases the ownership of the element.

### Emptiness

>     bool empty() const;

> Returns: `true` if the accessor is empty; `false`, otherwise.

### Key-value pair access

>     value_type& operator*() const;

> Returns: a reference to the key-value pair to which the accessor points.

> The behavior is undefined if the accessor is empty.

>     value_type* operator->() const;

> Returns: a pointer to the key-value pair to which the accessor points.

> The behavior is undefined if the accessor is empty.

### Releasing

>     void release();

> If `*this` is not empty, releases the ownership of the element. `*this` becomes empty.