[Rcpp-devel] What is the most efficient method to check if a Rcpp vector contains an element?
Dirk Eddelbuettel
edd at debian.org
Sun Dec 29 16:26:35 CET 2013
Hi Asis,
On 29 December 2013 at 12:50, Asis Hallab wrote:
| I am just wondering what would be the recommended and most efficient way to
| check, if a Rcpp Vector contains a given element?
|
| If I am not mistaken the C++ standard approach for very large std::vectors
| would be to first sort them and then perform a binary search:
|
| http://stackoverflow.com/questions/571394/how-to-find-an-item-in-a-stdvector
|
| What would be the Rcpp solution for the same task on a Rcpp vector?
Nothing wrong with what the accepted StackOverflow answer suggested: std::find().
| Should I convert my Rcpp Vector to a std::vector and do the above, as explained
| on the stackoverflow blog?
You don't need to convert. The STL types such as std::vector use iterators,
and Rcpp was set up in such a way to make this possible.
## next line wrapped for mail, otherwise all on one line
R> cppFunction('bool contains(NumericVector X, double z) {
return std::find(X.begin(), X.end(), z)!=X.end(); }')
R> contains(1:1e5,7777)
[1] TRUE
R> contains(1:1e5,-1)
[1] FALSE
R>
One could of course expand on this by wrapping templates around it, but as a
quick-and-dirty solution it is not too bad.
Cheers, Dirk
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list