17 Ocak 2019 Perşembe

std::hash Yapısı

Giriş
std::hash template parametresi için özelleşmiş bir sürü kod C++ ile geliyor.

Constructor
Şöyle yaparız.
std::hash<std::string> h;
operator () metodu
Bir çok kodda std::hash değişkeni oluşturmak yerine şöyle yapılıyor
return hash<string>() (sd.isbn());
Aslında şu kod ile aynıdır.
std::hash<std::string> temp;
return temp (sd.isbn());
Örnek - boost::multiprecision::cpp_int
Şöyle yaparız.
template <typename T> struct hash_str {
  size_t operator()(const T &t) const { return std::hash<std::string>()(t.str()); }
};

using bmp::cpp_int;
boost::unordered_map<cpp_int, cpp_int, hash_str<cpp_int> > mp;
Örnek - long long
Şöyle yaparız.
long long sum {0};
std::size_t value = std::hash<long long>()(sum);
Örnek - GUID
Eğer 64 bit olan ancak tipi farklı bir değişken varsa şöyle yapabiliriz.
namespace std
{
  template<>
  struct hash<GUID>
  {
    std::size_t operator()(const GUID& gUid) const
    {
      return std::hash<uint64_t>()(reinterpret_cast<const uint64_t>(gUid));    }
  };
}
Örnek - std::null_ptr
 Açıklaması şöyle.
Each standard library header that declares the template std::hash provides enabled specializations of std::hash for std::nullptr_t and all cv-unqualified arithmetic types (including any extended integer types), all enumeration types, and all pointer types.
Şöyle yaparız
std::hash<std::nullptr_t> h;
return h(nullptr);
Örnek - std::string
Şöyle yaparız.
std::string name = ...;
std::hash<std::string> h;
std::size_t value = h (name);

Hiç yorum yok:

Yorum Gönder