Есть ли какая-либо функция в С++, эквивалентная оператору %in%
в R? Рассмотрим следующую команду в R:
which(y %in% x)
Я попытался найти что-то эквивалентное на С++ (особенно в Armadillo), и я ничего не смог найти. Затем я написал свою собственную функцию, которая очень медленная по сравнению с приведенной выше командой R.
Вот что я написал:
#include <RcppArmadillo.h>
// [[Rcpp::depends("RcppArmadillo")]]
// [[Rcpp::export]]
arma::uvec myInOperator(arma::vec myBigVec, arma::vec mySmallVec ){
arma::uvec rslt = find(myBigVec == mySmallVec[0]);
for (int i = 1; i < mySmallVec.size(); i++){
arma::uvec rslt_tmp = find(myBigVec == mySmallVec[i]);
rslt = arma::unique(join_cols( rslt, rslt_tmp ));
}
return rslt;
}
Теперь, после поиска в коде выше, мы имеем:
x <- 1:4
y <- 1:10
res <- benchmark(myInOperator(y, x), which(y %in% x), columns = c("test",
"replications", "elapsed", "relative", "user.self", "sys.self"),
order = "relative")
И вот результаты:
test replications elapsed relative user.self sys.self
2 which(y %in% x) 100 0.001 1 0.001 0
1 myInOperator(y, x) 100 0.002 2 0.001 0
Может ли кто-нибудь помочь мне найти код С++, соответствующий которому (y% в% x), или сделать мой код более эффективным? Истекшее время для обеих функций уже очень мало. Я предполагаю, что я имею в виду, по эффективности, больше от перспективы программирования и от того, насколько эффективен способ, которым я думал о проблеме, и используемые мной команды.
Я ценю вашу помощь.