You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.0 KiB
47 lines
1.0 KiB
#include <iostream>
|
|
#include <string>
|
|
#include <sparsepp/spp.h>
|
|
|
|
using std::string;
|
|
|
|
struct Person
|
|
{
|
|
bool operator==(const Person &o) const
|
|
{
|
|
return _first == o._first && _last == o._last;
|
|
}
|
|
|
|
string _first;
|
|
string _last;
|
|
};
|
|
|
|
namespace std
|
|
{
|
|
// inject specialization of std::hash for Person into namespace std
|
|
// ----------------------------------------------------------------
|
|
template<>
|
|
struct hash<Person>
|
|
{
|
|
std::size_t operator()(Person const &p) const
|
|
{
|
|
std::size_t seed = 0;
|
|
spp::hash_combine(seed, p._first);
|
|
spp::hash_combine(seed, p._last);
|
|
return seed;
|
|
}
|
|
};
|
|
}
|
|
|
|
int main()
|
|
{
|
|
// As we have defined a specialization of std::hash() for Person,
|
|
// we can now create sparse_hash_set or sparse_hash_map of Persons
|
|
// ----------------------------------------------------------------
|
|
spp::sparse_hash_set<Person> persons =
|
|
{ { "John", "Galt" },
|
|
{ "Jane", "Doe" }
|
|
};
|
|
|
|
for (auto& p: persons)
|
|
std::cout << p._first << ' ' << p._last << '\n';
|
|
}
|