16 Şubat 2018 Cuma

hash

hash - int
Şöyle yaparız.
int id = ...;
std::size_t hash_value = boost::hash<int>()(id);
hash_combine metodu
Şu satırı dahil ederiz.
#include <boost/functional/hash.hpp> /* hash_combine */
Şöyle yaparız.
std::vector<T> v = ...

using boost::hash_value;
using boost::hash_combine;
// Start with a hash value of 0
std::size_t seed = 0;
T value;
for (int i=0; i< in.size(); i++)
{
  value = static_cast<T>(in[i]);
  hash_combine(seed, hash_value(value));
}
return seed;
hash_range metodu
boost ile tüm STL sınıfları için hash desteği gelmiyor. Şu satırı dahil ederiz.
#include <boost/functional/hash/hash_fwd.hpp>
Örnek
std::unordered_set için şöyle yaparız.
namespace boost
{
  template <class K, class C, class A>
  std::size_t hash_value (const std::unordered_set<K, C, A>& v)
  {
    return boost::hash_range(v.begin(), v.end());
  }
} // namespace boost
Örnek
Şöyle yaparız.
template <typename T> struct hash_bin {
  size_t operator()(const T &t) const {
    return boost::hash_range(t.backend().limbs(), t.backend().limbs()+t.backend().size());
  }
};

using bmp::cpp_int;
boost::unordered_map<cpp_int, cpp_int, hash_bin<cpp_int> > mp;

Hiç yorum yok:

Yorum Gönder