Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Boost.Hana: Hashable

Boost , ,

Boost.Hana  1.0.1
Your standard library for metaprogramming
Концепция<Hashable>представляет объекты, которые могут быть нормализованы до хэша уровня типа.

В повседневном программировании хэши очень важны как способ эффективного поиска объектов на картах. В то время как реализация карт очень отличается, одна и та же идея использования хешей для эффективного поиска применяется в метапрограммировании. Концепция<Hashable>представляет объекты, которые могут быть обобщены (возможно, с потерей информации) до типа, способом, подходящим для использования в структурах данных на основе хеширования. Конечно, для того, чтобы хеш хорошо себя вел, он должен подчиняться некоторым законам, которые объясняются ниже.

Minimal complete definition

<hash>Удовлетворение нижеприведенных законов

Laws

Во-первых,<hana::hash>должно вернуться<hana::type>. Кроме того, для любых двух объектов<Hashable><x>и<y>должно быть так, что

x == y implies hash(x) == hash(y)

где<==>обозначает<hana::equal>. Другими словами, любые два объекта, которые сравниваются равными (с<hana::equal>), также должны иметь одинаковый хеш. Однако обратное неверно, и два разных объекта могут иметь один и тот же хеш. Эта ситуация двух разных объектов, имеющих один и тот же хеш, называетсястолкновением.

Concrete models

<hana::integral_constant>,<hana::type>,<hana::string>

Free model for IntegralConstants

<IntegralConstant>—<Hashable>, если нормализовать его значение до<hana::integral_constant>. Тип значения, удерживаемого в нормированном<integral_constant>, равен<unsigned long long>для неподписанных интегральных типов и<signed long long>для подписанных интегральных типов.

Variables

constexpr auto boost::hana::hash
 Returns a hana::type representing the compile-time hash of an object.Given an arbitrary object x, hana::hash returns a hana::type representing the hash of x. In normal programming, hashes are usually numerical values that can be used e.g. as indices in an array as part of the implementation of a hash table. In the context of metaprogramming, we are interested in type-level hashes instead. Thus, hana::hash must return a hana::type object instead of an integer. This hana::type must somehow summarize the object being hashed, but that summary may of course lose some information. More...
 

Variable Documentation

constexpr auto boost::hana::hash

<#include <boost/hana/fwd/hash.hpp>>

Initial value:
= [](auto const& x) {
return tag-dispatched;
}

Возвращает<hana::type>, представляющий хэш компиляции времени объекта. Для того, чтобы получить ответ на вопрос<x>,<hana::hash>возвращает<hana::type>хэш<x>. В обычном программировании хэши обычно представляют собой числовые значения, которые могут использоваться, например, в качестве индексов в массиве в рамках реализации хеш-таблицы. В контексте метапрограммирования нас интересуют хэши типового уровня. Таким образом,<hana::hash>должен вернуть<hana::type>объект вместо целого числа. Это<hana::type>должно каким-то образом суммировать хешируемый объект, но это резюме может, конечно, потерять некоторую информацию.

Для правильного определения функции<hash>необходимо, чтобы всякий раз, когда<x>равен<y>,<hash(x)>равен<hash(y)>. Это гарантирует, что<hana::hash>является функцией в математическом смысле этого слова.

Signature

<Hashable><H>, подпись \(\mathtt{hash} : H \to \mathtt{type\_tag} \

Parameters
xОбъект, хеш которого должен быть вычислен.

Example

// Copyright Louis Dionne 2013-2016
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
#include <type_traits>
#include <utility>
namespace hana = boost::hana;
// Sample implementation of a compile-time set data structure. Of course,
// this naive implementation only works when no two elements of the same
// set have the same hash.
template <typename T>
struct bucket { };
template <typename ...T>
struct set
: bucket<typename decltype(hana::hash(std::declval<T>()))::type>...
{ };
template <typename Set, typename T>
struct contains
: std::is_base_of<
bucket<typename decltype(hana::hash(std::declval<T>()))::type>,
Set
>
{ };
using Set = set<hana::int_<1>, hana::ulong<2>, hana::type<char>>;
static_assert(contains<Set, hana::int_<1>>{}, "");
static_assert(contains<Set, hana::ulong<2>>{}, "");
static_assert(contains<Set, hana::type<char>>{}, "");
static_assert(!contains<Set, hana::int_<3>>{}, "");
static_assert(!contains<Set, hana::type<float>>{}, "");
int main() { }

Статья Boost.Hana: Hashable раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 00:24:06/0.0060138702392578/1