#include <iostream>
#include <iomanip>
#include <string>
#include <unordered_map>
int main ()
{
std::unordered_map<std::string,int> m = {
{"Belgium", 32},
{"Canada", 1},
{"France", 33},
{"Germany", 49},
{"United Kingdom", 44},
{"United States", 1}
};
std::cout << "Max bucket count: "<< m.max_bucket_count() << std::endl;
std::cout << "Bucket count: " << m.bucket_count() <<std::endl;
for (int i=0; i < m.bucket_count(); i++ ) {
std::cout <<" bucket "<< i << " : size " << m.bucket_size(i) << std::endl;
}
std::cout<<"Average bucket load:" <<m.load_factor()<<std::endl;
std::cout << "Container content: " <<std::endl;
for (auto& x: m) {
std::cout <<"\t"<< std::setw(20) << x.first << " -> " << x.second
<< "\tBucket " << m.bucket (x.first)
<< "\tAddress: "<< (void*)&x << std::endl;
}
m.rehash (2*m.bucket_count() );
std::cout << "Bucket count after rehash: " << m.bucket_count() <<std::endl;
for (int i=0; i < m.bucket_count(); i++ ) {
std::cout <<" bucket "<< i << " : size " << m.bucket_size(i) << std::endl;
}
std::cout<<"Average bucket load:" <<m.load_factor()<<std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CgppbnQgbWFpbiAoKQp7CiAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLGludD4gbSA9IHsKICAgIHsiQmVsZ2l1bSIsIDMyfSwKICAgIHsiQ2FuYWRhIiwgMX0sCiAgICB7IkZyYW5jZSIsIDMzfSwKICAgIHsiR2VybWFueSIsIDQ5fSwKICAgIHsiVW5pdGVkIEtpbmdkb20iLCA0NH0sCiAgICB7IlVuaXRlZCBTdGF0ZXMiLCAxfQogIH07CgogIHN0ZDo6Y291dCA8PCAiTWF4IGJ1Y2tldCBjb3VudDogIjw8IG0ubWF4X2J1Y2tldF9jb3VudCgpIDw8IHN0ZDo6ZW5kbDsgCiAgc3RkOjpjb3V0IDw8ICJCdWNrZXQgY291bnQ6ICIgPDwgbS5idWNrZXRfY291bnQoKSA8PHN0ZDo6ZW5kbDsgCiAgZm9yIChpbnQgaT0wOyBpIDwgbS5idWNrZXRfY291bnQoKTsgaSsrICkgewogIAlzdGQ6OmNvdXQgPDwiICAgYnVja2V0ICI8PCBpIDw8ICIgOiBzaXplICIgPDwgbS5idWNrZXRfc2l6ZShpKSA8PCBzdGQ6OmVuZGw7CiAgfQogIHN0ZDo6Y291dDw8IkF2ZXJhZ2UgYnVja2V0IGxvYWQ6IiA8PG0ubG9hZF9mYWN0b3IoKTw8c3RkOjplbmRsOyAKIAogIHN0ZDo6Y291dCA8PCAiQ29udGFpbmVyIGNvbnRlbnQ6ICIgPDxzdGQ6OmVuZGw7CiAgZm9yIChhdXRvJiB4OiBtKSB7CiAgICBzdGQ6OmNvdXQgPDwiXHQiPDwgc3RkOjpzZXR3KDIwKSA8PCB4LmZpcnN0IDw8ICIgLT4gIiA8PCB4LnNlY29uZCAKICAgICAgICAgICAgICA8PCAiXHRCdWNrZXQgIiA8PCBtLmJ1Y2tldCAoeC5maXJzdCkgCiAgICAgICAgICAgICAgPDwgIlx0QWRkcmVzczogIjw8ICh2b2lkKikmeCA8PCBzdGQ6OmVuZGw7CiAgfQogIAogIG0ucmVoYXNoICgyKm0uYnVja2V0X2NvdW50KCkgKTsKICBzdGQ6OmNvdXQgPDwgIkJ1Y2tldCBjb3VudCBhZnRlciByZWhhc2g6ICIgPDwgbS5idWNrZXRfY291bnQoKSA8PHN0ZDo6ZW5kbDsgCiAgZm9yIChpbnQgaT0wOyBpIDwgbS5idWNrZXRfY291bnQoKTsgaSsrICkgewogIAlzdGQ6OmNvdXQgPDwiICAgYnVja2V0ICI8PCBpIDw8ICIgOiBzaXplICIgPDwgbS5idWNrZXRfc2l6ZShpKSA8PCBzdGQ6OmVuZGw7CiAgfQogIHN0ZDo6Y291dDw8IkF2ZXJhZ2UgYnVja2V0IGxvYWQ6IiA8PG0ubG9hZF9mYWN0b3IoKTw8c3RkOjplbmRsOyAKIAoKICByZXR1cm4gMDsKfQ==