unordered etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
unordered etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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;

12 Haziran 2017 Pazartesi

unordered unordered_multimap Sınıfı

Tanımlama
Şöyle yaparız.
boost::unordered_multimap<string, string> map;
Constructor
Açıklaması şöyle
Constructs an empty container with at least n buckets, using hf as the hash
function, eq as the key equality predicate, a as the allocator and a maximum load
factor of 1.0.
İmzası şöyle
explicit unordered_multimap(size_type n = implementation-defined, 
                            hasher const& hf = hasher(), 
                            key_equal const& eq = key_equal(), 
                            allocator_type const& a = allocator_type());
equal_range metodu
Şöyle yaparız.
std::pair<iterator, iterator> ret = map.equal_range("key"); 
Dolaşmak için şöyle yaparız.
for(auto Itr = ret.first; Itr != ret.second; ++Itr)
  std::cout << "The values mapped are : " << Itr->second << std::endl;
insert metodu
Açıklaması şöyle
The number of buckets can be automatically increased by a call to insert, or as the result of calling rehash.