Description
'Rcpp' Interface to 'sparsepp'.
Description
Provides interface to 'sparsepp' - fast, memory efficient hash map. It is derived from Google's excellent 'sparsehash' implementation. We believe 'sparsepp' provides an unparalleled combination of performance and memory usage, and will outperform your compiler's unordered_map on both counts. Only Google's 'dense_hash_map' is consistently faster, at the cost of much greater memory usage (especially when the final size of the map is not known in advance).
README.md
Benchmarks
Check original sparsepp repository and write-up which compares hashmap implementations.
Use sparsepp from another package
To use C++ code from sparsepp
:
- In DESCRIPTION, add
LinkingTo: sparsepp
. - In the C++ file, add:
#include <sparsepp/spp.h>
Simple example
#include <sparsepp/spp.h>
using spp::sparse_hash_map;
sparse_hash_map<string, int> smap;
Defining custom hash function
#include <iostream>
#include <functional>
#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';
}