Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::hash(3)		      C++ Standard Libary		  std::hash(3)

NAME
       std::hash - std::hash

Synopsis
	  Defined in header <variant>
	  template <class... Types>		(since C++17)
	  struct hash<std::variant<Types...>>;

	  The  template	 specialization	of std::hash for the std::variant tem-
       plate allows users
	  to obtain hashes of variant objects.

	  The specialization std::hash<std::variant<Types...>> is enabled (see
       std::hash) if
	  every	specialization in std::hash<std::remove_const_t<Types>>...  is
       enabled,	and is
	  disabled otherwise.

	  The member functions of this specialization are not guaranteed to be
       noexcept.

Template parameters
	  Types	 -  the	types of the alternatives supported by the variant ob-
       ject

Notes
	  Unlike std::hash<std::optional>, hash	of a variant  does  not	 typi-
       cally equal the hash
	  of  the  contained  value;  this  makes  it  possible	to distinguish
       std::variant<int, int>
	  holding the same value as different alternatives.

Example
       // Run this code

	#include <variant>
	#include <iostream>
	#include <string>

	using Var = std::variant<int, int, int,	std::string>;

	template<unsigned I>
	void print(Var const& var) {
	    std::cout << "get<"	<< var.index() << "> = "
		      << std::get<I>(var)
		      << "\t" "# = "
		      << std::hash<Var>{}(var) << '\n';
	}

	int main()
	{
	    Var	var;
	    std::get<0>(var) = 2020;
	    print<0>(var);
	    var.emplace<1>(2023);
	    print<1>(var);
	    var.emplace<2>(2026);
	    print<2>(var);
	    var	= "C++";
	    print<3>(var);
	}

Possible output:
	get<0> = 2020	  # = 2020
	get<1> = 2023	  # = 2024
	get<2> = 2026	  # = 2028
	get<3> = C++	  # = 15518724754199266859

See also
	  hash	  hash function	object
	  (C++11) (class template)

http://cppreference.com		  2022.07.31			  std::hash(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::hash&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help