Giriş
Şu satırı dahil ederiz.
Elimizde == operatörünü tanımlayan yapılar olsun.
Şu satırı dahil ederiz.
#include <boost/unordered_map.hpp>
Sınıfın template parametreleri şöyletemplate <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 şöyletemplate <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;
ÖrnekElimizde == 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