Język C++
hash
[szablon struktury] Funktor realizujący założenia funkcji haszującej.Składnia
#include <functional>
namespace std
{
template < typename TypDanych >
struct hash
{
size_t operator ()( TypDanych wartosc ) const;
};
}
Parametry szablonu
Argumenty funktora
Zwracana wartość
Zwraca klucz haszujący dla argumentu przekazanego do funktora.
Opis szczegółowy
Funktor realizujący założenia funkcji haszującej. Działanie funktorów haszujących zaimplementowanych w standardzie C++11 gwarantują, że zwracane wartości kluczy będą zawsze takie same dla tych samych danych wejściowych.
Specjalizacje dla typów podstawowych
Standard C++11 definiuje specjalizacje funktorów haszujących dla typów podstawowych, występujących w C++. Typy danych dla których zaimplementowano specjalizacje to:
bool
,
char
,
signed char
,
unsigned char
,
char16_t
,
char32_t
,
wchar_t
,
short
,
unsigned short
,
int
,
unsigned int
,
long
,
long long
,
unsigned long
,
unsigned long long
,
float
,
double
oraz
long double
. W standardzie C++11 zaimplementowano również specjalizację dla wskaźników dowolnego typu i wygląda ona następująco:
#include <functional>
namespace std
{
template < class T >
struct hash < T *>;
}
Specjalizacje dla typów ze standardowych bibliotek
Standard C++11 definiuje specjalizacje funktorów haszujących dla typów należących do standardowych bibliotek C++. Lista wspieranych specjalizacji:
std::hash < std::string >
std::hash < std::u16string >
std::hash < std::u32string >
std::hash < std::wstring >
std::hash < std::error_code >
std::hash < std::bitset >
std::hash < std::unique_ptr >
std::hash < std::shared_ptr >
std::hash < std::type_index >
std::hash < std::vector < bool > >
std::hash < std::thread::id >
Dodatkowe informacje
Nie należy zapisywać na dysku wartości jakie zwracają funktory haszujące, ponieważ implementacje algorytmów haszujących mogą ulec w przyszłości zmianie.
Przykład
#include <functional>
#include <iostream>
int main()
{
std::hash < const char *> haszujWskaznikNaTekst;
std::cout <<( haszujWskaznikNaTekst( "to jest tekst" ) ) << std::endl;
std::cout <<( haszujWskaznikNaTekst( "to jesttekst" ) ) << std::endl;
std::hash < std::string > haszujTekst;
std::cout <<( haszujTekst( "to jest tekst" ) ) << std::endl;
std::cout <<( haszujTekst( "to jesttekst" ) ) << std::endl;
std::hash < int > haszujLiczbyCalkowite;
std::cout << haszujLiczbyCalkowite( 123 ) << std::endl;
std::cout << haszujLiczbyCalkowite( 456 ) << std::endl;
std::hash < double > haszujLiczbyRzeczywiste;
std::cout << haszujLiczbyRzeczywiste( 123.3 ) << std::endl;
std::cout << haszujLiczbyRzeczywiste( 456.3 ) << std::endl;
return 0;
}
Standardowe wyjście programu:
4685927
4685941
577877309
2187307826
123
456
2899334566
36644549
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.