12 Ekim 2017 Perşembe

unordered unordered_map Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/unordered_map.hpp>
Sınıfın template parametreleri şöyle
template <class K, class T, class H, class P, class A>
class unordered_map
{
  ...
};
H yani hash ve P parametrelerini vermek zorunda değiliz. Varsayılan nesneler şöyle
template <class K,
    class T,
    class H = boost::hash<K>,
    class P = std::equal_to<K>,
    class A = std::allocator<std::pair<const K, T> > >
class unordered_map;
Örnek
Elimizde == operatörünü tanımlayan yapılar olsun.
struct v4RouteKey_t { 
  boost::array<uint8_t, 4> ipv4; uint32_t val; 
  bool operator==(v4RouteKey_t const& other) const {
    return ipv4 == other.ipv4 && val == other.val;
  };
};
struct v6RouteKey_t { 
  boost::array<uint8_t, 16> ipv6; uint32_t val; 
  bool operator==(v6RouteKey_t const& other) const {
    return ipv6 == other.ipv6 && val == other.val;
  };
};
hash metodumuz olsun. C++11'den farklı olarak hash metodları std veya boost isim alanı içinde olmak zorunda değil.
size_t hash_value(v4RouteKey_t const& key) { return key.val; }
size_t hash_value(v6RouteKey_t const& key) { return key.val; }
key tipi variant olan bir map tanımlamak için şöyle yaparız.
struct RouteValue_t {};

typedef boost::variant<v4RouteKey_t, v6RouteKey_t> RouteKey;
typedef boost::unordered_map<RouteKey, RouteValue_t> RouteMap;

RouteMap map;

Hiç yorum yok:

Yorum Gönder