GitHub - dselivanov/r-sparsepp: Rcpp interface to sparsepp - efficient hash map for C++ (original) (raw)

CRAN_Status_Badge License

Benchmarks

Check original sparsepp repository and write-up which compares hashmap implementations.

insert-benchmark

Use sparsepp from another package

To use C++ code from sparsepp:

  1. In DESCRIPTION, add LinkingTo: sparsepp.
  2. 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 #include #include #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 { 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 persons = { { "John", "Galt" }, { "Jane", "Doe" } }; for (auto& p: persons) std::cout << p._first << ' ' << p._last << '\n'; }