std::hash<std::optional> (3) - Linux Manuals
std::hash<std::optional>: std::hash<std::optional>
Command to display std::hash<std::optional>
manual in Linux: $ man 3 std::hash<std::optional>
NAME
std::hash<std::optional> - std::hash<std::optional>
Synopsis
Defined in header <optional>
template<class T> (since C++17)
struct hash<std::optional<T>>;
The template specialization of std::hash for the std::optional class allows users to obtain hashes of the values contained in optional objects.
The specialization std::hash<optional<T>> is enabled (see std::hash) if std::hash<std::remove_const_t<T>> is enabled, and is disabled otherwise.
When enabled, for an object o of type std::optional<T> that contains a value, std::hash<std::optional<T>>()(o) evaluates to the same value as std::hash<std::remove_const_t<T>>()(*o). For an optional that does not contain a value, the hash is unspecified.
The member functions of this specialization are not guaranteed to be noexcept because the hash of the underlying type might throw.
Template parameters
T - the type of the value contained in optional object
Example
// Run this code
#include <optional>
#include <unordered_set>
#include <string>
#include <iostream>
using namespace std::literals;
int main()
{
// hash<optional> makes it possible to use unordered_set
std::unordered_set<std::optional<std::string>> s = {
"abc"s, std::nullopt, "def"s
};
for(const auto& o : s)
std::cout << o.value_or("(null)") << ' ';
}
Possible output:
def abc (null)
See also
hash hash function object
(class template)
(C++11)
Pages related to std::hash<std::optional>
- std::hash<std::error_code> (3) - std::hash<std::error_code>
- std::hash<std::error_condition> (3) - std::hash<std::error_condition>
- std::hash<std::experimental::optional> (3) - std::hash<std::experimental::optional>
- std::hash<std::thread::id> (3) - std::hash<std::thread::id>
- std::hash<std::type_index> (3) - std::hash<std::type_index>
- std::hash<std::unique_ptr> (3) - std::hash<std::unique_ptr>
- std::hash<std::variant> (3) - std::hash<std::variant>
- std::hash(std::bitset) (3) - std::hash(std::bitset)
- std::hash(std::experimental::observer_ptr) (3) - std::hash(std::experimental::observer_ptr)
- std::hash(std::experimental::propagate_const) (3) - std::hash(std::experimental::propagate_const)
- std::hash(std::experimental::shared_ptr) (3) - std::hash(std::experimental::shared_ptr)
- std::hash(std::experimental::string_view,std::experimental::wstring_view, (3) - std::hash(std::experimental::string_view,std::experimental::wstring_view,
- std::hash(std::experimental::string_view,std::experimental::wstring_view,std::experimental::u16string_view,std::experimental::u32string_view) (3) - std::hash(std::experimental::string_view,std::experimental::wstring_view,std::experimental::u16string_view,std::experimental::u32string_view)