Consider the problem to sort all elements of the given vector in ascending order. We can simply use the function std::sort from the C++ STL.
<span>#include <Rcpp.h></span>
<span>using</span> <span>namespace</span> <span>Rcpp</span><span>;</span>
<span>// [[Rcpp::export]]</span>
<span>NumericVector</span> <span>stl_sort</span><span>(</span><span>NumericVector</span> <span>x</span><span>)</span> <span>{</span>
<span>NumericVector</span> <span>y</span> <span>=</span> <span>clone</span><span>(</span><span>x</span><span>);</span>
<span>std</span><span>::</span><span>sort</span><span>(</span><span>y</span><span>.</span><span>begin</span><span>(),</span> <span>y</span><span>.</span><span>end</span><span>());</span>
<span>return</span> <span>y</span><span>;</span>
<span>}</span>
library<span>(</span>rbenchmark<span>)</span>
set.seed<span>(</span><span>123</span><span>)</span>
z <span><-</span> rnorm<span>(</span><span>100000</span><span>)</span>
x <span><-</span> rnorm<span>(</span><span>100</span><span>)</span>
<span># check that stl_sort is the same as sort</span>
stopifnot<span>(</span>all.equal<span>(</span>stl_sort<span>(</span>x<span>),</span> sort<span>(</span>x<span>)))</span>
<span># benchmark stl_sort and sort</span>
benchmark<span>(</span>stl_sort<span>(</span>z<span>),</span> sort<span>(</span>z<span>),</span> order<span>=</span><span>"relative"</span><span>)[,</span><span>1</span><span>:</span><span>4</span><span>]</span>
test replications elapsed relative
1 stl_sort(z) 100 0.632 1.000
2 sort(z) 100 1.164 1.842
Consider the problem of sorting the first n elements of a given vector. ...