21 Aralık 2016 Çarşamba

multi_index hashed_non_unique Sınıfı

Giriş
Şu satırı dahil ederiz.
#include<boost/multi_index/hashed_index.hpp>
Kolay kullanım için şu satırı dahil ederiz.
namespace mi = boost::multi_index;
std::unordered_multimap gibidir.
1.Cycle + Slot içinde gönderilen n tane mesaja bu anahtar değerler ile tekrar erişmek için kullandım. 

const_mem_fun - Üye Metod
Şu satırı dahil ederiz.
#include<boost/multi_index/mem_fun.hpp>
Elimizde şöyle iki sınıf olsun
class Bar
{
  int a, b;
};

class Foo
{
  Bar ex;
public:
  void setId(Bar a) {
    ex = a;
  };
  virtual const Bar& getId() const { 
    return ex; 
  }
};
Şöyle yaparız. Metod imzasındaki donüş tipi birebir uygulanmalıdır. Dönüş tipi const ise const kullanılmalıdır.
bi::multi_index_container<
  StoreMe,
  bi::indexed_by<
    bi::hashed_non_unique<bi::const_mem_fun<Foo,const Bar&, &Foo::getId> >  >
>;
Tag + const_mem_fun - Üye Metod
Tag ile kullanmak istersek şöyle yaparız.
bi::hashed_non_unique<
  bi::tag<IndexByNonUniqueId>,
  bi::const_mem_fun<StoredObj, std::string,&StoredObj::getNonUniqueIdString> 
>
Tag + mem - Üye Alan
Elimizdee bir yapı olsun.
struct X
{
  long long l; // assume unique
  int i1; // assume unique
  int i2; // assume non-unique
  // plus any ohter data you have in your class X
};
Tag'lerimiz olsun.
struct IndexByL {};
struct IndexByI1 {};
struct IndexByI2 {};
Şöyle yaparız.
using Container = boost::multi_index_container<
  X*, // the data type stored
  boost::multi_index::indexed_by< // list of indexes
    ...,
    boost::multi_index::hashed_non_unique<  //hashed non-unique index over 'i2'
      boost::multi_index::tag<IndexByI2>, // give that index a name
      boost::multi_index::member<X, int, &X::i2> // what will be the index's key
    >
  >
>;
count metodu
Şöyle yaparız.
Container c = ...;

// Look up by i2
auto& indexByI2 = c.get<IndexByI2>();
size_t numberOfHundreds = indexByI2.count(100);



Hiç yorum yok:

Yorum Gönder