Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Opracował: Piotr DejaVu Szawdyński
Język C++

hash

[szablon struktury] Funktor realizujący założenia funkcji haszującej.

Składnia

C/C++
#include <functional>
namespace std
{
    template < typename TypDanych >
    struct hash
    {
        size_t operator ()( TypDanych wartosc ) const;
    };
}

Parametry szablonu

ParametrOpis
typename TypDanychTyp argumentu przekazywanego do funktora.

Argumenty funktora

ArgumentOpis
TypDanych wartoscArgument, którego ma zostać zwrócony klucz haszujący.

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:
C/C++
#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:
C/C++
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

C/C++
#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