sparsepp-package {sparsepp} | R Documentation |
sparsepp
Description
sparsepp
provides bindings to the
sparsepp - fast, memory efficient hash map for C++.
sparsepp
is an open source C++ library derived from Google's
excellent sparsehash implementation, but considerably outperform it - https://github.com/greg7mdp/sparsepp/blob/master/bench.md.
It aims to achieve the following objectives:
A drop-in alternative for unordered_map and unordered_set.
Extremely low memory usage (typically about one byte overhead per entry).
Very efficient, typically faster than your compiler's unordered map/set or Boost's.
C++11 support (if supported by compiler).
Single header implementation - just copy sparsepp.h to your project and include it.
Tested on Windows (vs2010-2015, g++), linux (g++, clang++) and MacOS (clang++).
Author(s)
Maintainer: Dmitriy Selivanov selivanov.dmitriy@gmail.com
Authors:
Gregory Popovitch greg7mdp@gmail.com [copyright holder]
Google Inc [copyright holder]
See Also
Useful links:
Report bugs at https://github.com/dselivanov/r-sparsepp/issues
Examples
## Not run:
library(Rcpp)
code = "
// [[Rcpp::plugins(cpp11)]]
#include <Rcpp.h>
using namespace std;
using namespace Rcpp;
// drop-in replacement for unordered_map
//#include <unordered_map>
#include <sparsepp/spp.h>
//[[Rcpp::depends(sparsepp)]]
using spp::sparse_hash_map;
// @export
// [[Rcpp::export]]
IntegerVector word_count(CharacterVector v) {
//unordered_map<string, int> smap;
sparse_hash_map<string, int> smap;
for(auto x: v) {
smap[as<string>(x)] ++;
}
IntegerVector res(smap.size());
int i = 0;
for(auto s:smap) {
res[i]=s.second;
i++;
}
return(res);
}"
f = tempfile(, fileext = ".cpp")
writeLines(code, f)
sourceCpp(f)
unlink(f)
word_count(sample(letters, 100, T))
## End(Not run)