#include <unordered_set>
#include <iostream>
using namespace std;
class Sales_data
{
public:
string isbn()const {return a;}
private:
string a;
};
size_t hasher(const Sales_data &sd)
{
return hash<string>()(sd.isbn());
}
bool eqOp(const Sales_data &lhs, const Sales_data &rhs)
{
return lhs.isbn() == rhs.isbn();
}
int main()
{
using SD_multiset = unordered_multiset<Sales_data,decltype(hasher)*, decltype(eqOp)*>;
// arguments are the bucket size and pointers to the hash function and equality operator
SD_multiset bookstore(42, hasher, eqOp);
return 0;
}
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBTYWxlc19kYXRhCnsKICAgIHB1YmxpYzoKICAgICAgICBzdHJpbmcgaXNibigpY29uc3Qge3JldHVybiBhO30KICAgIHByaXZhdGU6CiAgICAJc3RyaW5nIGE7Cn07CgpzaXplX3QgaGFzaGVyKGNvbnN0IFNhbGVzX2RhdGEgJnNkKQp7CiAgICByZXR1cm4gaGFzaDxzdHJpbmc+KCkoc2QuaXNibigpKTsKfQpib29sIGVxT3AoY29uc3QgU2FsZXNfZGF0YSAmbGhzLCBjb25zdCBTYWxlc19kYXRhICZyaHMpCnsKICAgIHJldHVybiBsaHMuaXNibigpID09IHJocy5pc2JuKCk7Cn0KCmludCBtYWluKCkKewogICAgdXNpbmcgU0RfbXVsdGlzZXQgPSB1bm9yZGVyZWRfbXVsdGlzZXQ8U2FsZXNfZGF0YSxkZWNsdHlwZShoYXNoZXIpKiwgZGVjbHR5cGUoZXFPcCkqPjsKICAgIC8vIGFyZ3VtZW50cyBhcmUgdGhlIGJ1Y2tldCBzaXplIGFuZCBwb2ludGVycyB0byB0aGUgaGFzaCBmdW5jdGlvbiBhbmQgZXF1YWxpdHkgb3BlcmF0b3IKICAgIFNEX211bHRpc2V0IGJvb2tzdG9yZSg0MiwgaGFzaGVyLCBlcU9wKTsKICAgIAoJcmV0dXJuIDA7Cn0K