#include <boost/intrusive/unordered_set.hpp>
#include <vector>
#include <functional>
#include <boost/functional/hash.hpp>
#include <iostream>
using namespace boost::intrusive;
class MyClass : public unordered_set_base_hook<>
{ //This is a derivation hook
int int_;
public:
unordered_set_member_hook<> member_hook_; //This is a member hook
MyClass(int i)
: int_(i)
{}
friend bool operator== (const MyClass &a, const MyClass &b)
{ return a.int_ == b.int_; }
friend std::size_t hash_value(const MyClass &value)
{ return std::size_t(value.int_); }
};
//Define an unordered_set that will store MyClass objects using the base hook
typedef unordered_set<MyClass> BaseSet;
//Define an unordered_multiset that will store MyClass using the member hook
typedef member_hook<MyClass, unordered_set_member_hook<>, &MyClass::member_hook_>
MemberOption;
typedef unordered_multiset< MyClass, MemberOption> MemberMultiSet;
int main()
{
for (int i = 0; i < 33; i++)
std::cout << "i: " << i << ". Suggested: " << BaseSet::suggested_upper_bucket_count(i) << std::endl;
return 0;
}
I2luY2x1ZGUgPGJvb3N0L2ludHJ1c2l2ZS91bm9yZGVyZWRfc2V0LmhwcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxib29zdC9mdW5jdGlvbmFsL2hhc2guaHBwPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2UgYm9vc3Q6OmludHJ1c2l2ZTsKCmNsYXNzIE15Q2xhc3MgOiBwdWJsaWMgdW5vcmRlcmVkX3NldF9iYXNlX2hvb2s8Pgp7ICAgICAgICAgICAgICAgLy9UaGlzIGlzIGEgZGVyaXZhdGlvbiBob29rCiAgIGludCBpbnRfOwoKICAgcHVibGljOgogICB1bm9yZGVyZWRfc2V0X21lbWJlcl9ob29rPD4gbWVtYmVyX2hvb2tfOyAvL1RoaXMgaXMgYSBtZW1iZXIgaG9vawoKICAgTXlDbGFzcyhpbnQgaSkKICAgICAgOiAgaW50XyhpKQogICB7fQoKICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgTXlDbGFzcyAmYSwgY29uc3QgTXlDbGFzcyAmYikKICAgeyAgcmV0dXJuIGEuaW50XyA9PSBiLmludF87ICB9CgogICBmcmllbmQgc3RkOjpzaXplX3QgaGFzaF92YWx1ZShjb25zdCBNeUNsYXNzICZ2YWx1ZSkKICAgeyAgcmV0dXJuIHN0ZDo6c2l6ZV90KHZhbHVlLmludF8pOyB9Cn07CgovL0RlZmluZSBhbiB1bm9yZGVyZWRfc2V0IHRoYXQgd2lsbCBzdG9yZSBNeUNsYXNzIG9iamVjdHMgdXNpbmcgdGhlIGJhc2UgaG9vawp0eXBlZGVmIHVub3JkZXJlZF9zZXQ8TXlDbGFzcz4gICAgQmFzZVNldDsKCi8vRGVmaW5lIGFuIHVub3JkZXJlZF9tdWx0aXNldCB0aGF0IHdpbGwgc3RvcmUgTXlDbGFzcyB1c2luZyB0aGUgbWVtYmVyIGhvb2sKdHlwZWRlZiBtZW1iZXJfaG9vazxNeUNsYXNzLCB1bm9yZGVyZWRfc2V0X21lbWJlcl9ob29rPD4sICZNeUNsYXNzOjptZW1iZXJfaG9va18+CiAgIE1lbWJlck9wdGlvbjsKdHlwZWRlZiB1bm9yZGVyZWRfbXVsdGlzZXQ8IE15Q2xhc3MsIE1lbWJlck9wdGlvbj4gIE1lbWJlck11bHRpU2V0OwoKaW50IG1haW4oKQp7CiAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzM7IGkrKykKCQlzdGQ6OmNvdXQgPDwgImk6ICIgPDwgaSA8PCAiLiBTdWdnZXN0ZWQ6ICIgPDwgQmFzZVNldDo6c3VnZ2VzdGVkX3VwcGVyX2J1Y2tldF9jb3VudChpKSA8PCBzdGQ6OmVuZGw7CiAgIHJldHVybiAwOwp9