Справочник по Ada (Ada 2022)
A.4.9 Хеширование строк
Статическая семантика
Функция библиотеки Strings.Hash имеет следующее объявление:
with Ada.Containers;
function Ada.Strings.Hash (Key : String) return Containers.Hash_Type
with Pure;
function Ada.Strings.Hash (Key : String) return Containers.Hash_Type
with Pure;
Возвращает определённое реализацией значение, являющееся функцией от значения Key. Если строки A и B равны, то Hash(A) равно Hash(B).
Функция библиотеки Strings.Fixed.Hash имеет следующее объявление:
with Ada.Containers, Ada.Strings.Hash;
function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
renames Ada.Strings.Hash;
function Ada.Strings.Fixed.Hash (Key : String) return Containers.Hash_Type
renames Ada.Strings.Hash;
Обобщённая функция библиотеки Strings.Bounded.Hash имеет следующее объявление:
with Ada.Containers;
generic
with package Bounded is
new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash (Key : Bounded.Bounded_String)
return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
generic
with package Bounded is
new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash (Key : Bounded.Bounded_String)
return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
Эквивалентна Strings.Hash (Bounded.To_String (Key));
Функция библиотеки Strings.Unbounded.Hash имеет следующее объявление:
with Ada.Containers;
function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
function Ada.Strings.Unbounded.Hash (Key : Unbounded_String)
return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
Эквивалентна Strings.Hash (To_String (Key));
Функция библиотеки Strings.Hash_Case_Insensitive имеет следующее объявление:
with Ada.Containers;
function Ada.Strings.Hash_Case_Insensitive (Key : String)
return Containers.Hash_Type
with Pure;
function Ada.Strings.Hash_Case_Insensitive (Key : String)
return Containers.Hash_Type
with Pure;
Возвращает определённое реализацией значение, являющееся функцией от значения Key, преобразованного в нижний регистр. Если строки A и B такие, что Strings.Equal_Case_Insensitive (A, B) (см. A.4.10) истинно, то Hash_Case_Insensitive(A) равно Hash_Case_Insensitive(B).
Функция библиотеки Strings.Fixed.Hash_Case_Insensitive имеет следующее объявление:
with Ada.Containers, Ada.Strings.Hash_Case_Insensitive;
function Ada.Strings.Fixed.Hash_Case_Insensitive (Key : String)
return Containers.Hash_Type renames Ada.Strings.Hash_Case_Insensitive;
function Ada.Strings.Fixed.Hash_Case_Insensitive (Key : String)
return Containers.Hash_Type renames Ada.Strings.Hash_Case_Insensitive;
Обобщённая функция библиотеки Strings.Bounded.Hash_Case_Insensitive имеет следующее объявление:
with Ada.Containers;
generic
with package Bounded is
new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash_Case_Insensitive
(Key : Bounded.Bounded_String) return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
generic
with package Bounded is
new Ada.Strings.Bounded.Generic_Bounded_Length (<>);
function Ada.Strings.Bounded.Hash_Case_Insensitive
(Key : Bounded.Bounded_String) return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
Эквивалентна Strings.Hash_Case_Insensitive (Bounded.To_String (Key));
Функция библиотеки Strings.Unbounded.Hash_Case_Insensitive имеет следующее объявление:
with Ada.Containers;
function Ada.Strings.Unbounded.Hash_Case_Insensitive
(Key : Unbounded_String) return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
function Ada.Strings.Unbounded.Hash_Case_Insensitive
(Key : Unbounded_String) return Containers.Hash_Type
with Preelaborate, Nonblocking, Global => in out synchronized;
Эквивалентна Strings.Hash_Case_Insensitive (To_String (Key));
Рекомендации по реализации
Функции Hash должны быть хорошими хеш-функциями, возвращая широкий спектр значений для различных строковых значений. Вероятность того, что похожие строки вернут одно и то же значение, должна быть низкой.