Supporting lambdas
The code
auto fctHash=[](size_t val) -> size_t {
return val;
};
auto fctEqual=[](size_t val1, size_t val2) -> bool {
return val1 == val2;
};
tsl::sparse_map<size_t, int, decltype(fctHash), decltype(fctEqual)> V({}, fctHash, fctEqual);
does not compile. This is not dramatic as the following does:
std::function<size_t(size_t)> fctHash=[](size_t val) -> size_t {
return val;
};
std::function<bool(size_t,size_t)> fctEqual=[](size_t val1, size_t val2) -> bool {
return val1 == val2;
};
tsl::sparse_map<size_t, int, std::function<size_t(size_t)>, std::function<bool(size_t,size_t)>> V({}, fctHash, fctEqual);
but could this be addressed? This would allow better compatibility with the std::unordered_map for which tsl::sparse_map is a replacement.
Hi,
Thank you for the report, it can be fixed. Currently the rehash_impl creates a new sparse_hash and move/copy the values from the old hash map to the new one and then swap the two maps but unfortunately lambdas, and thus Hash and KeyEqual, are not swappable so sparse_hash::swap can't be called. It would be possible to just create a new m_sparse_buckets array and swap it instead of creating a full sparse_hash.
I will check to fix the problem when I can find some time to work on it.
Thibaut