基本 Rcpp 列表输入错误
Error with Basic Rcpp List Input
我无法弄清楚是什么导致了以下代码中的错误。简而言之,代码尝试遍历列表元素(每个元素都是一个整数向量),并按顺序将它们分配给地图数据结构。
// [[Rcpp::export]]
void getPathsFromList(Rcpp::List& pathsList,
std::unordered_map<int, std::vector<int> >& paths ){
Rcpp::List plist(pathsList);
int p=plist.size();
for( int i=0;i<p; i++ ){
SEXP e = plist[i];
Rcpp::NumericVector v(e);
for( int j=0; j<v.size(); j++ ){
paths[i].push_back( v[j] );
}
}
}
我得到的错误如下:
error: no matching constructor for initialization of 'std::__1::unordered_map<int, std::__1::vector<int, std::__1::allocator<int> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::vector<int, std::__1::allocator<int> > > > >
我还尝试将上面的 v[j]
显式分配给 int
变量,然后将其推入向量,但没有太大帮助。看来我缺少一些基本的东西,我将不胜感激任何帮助。 (我在 OSX 小牛队。)
不幸的是, Rcpp 不支持与 std:map<int, vector<int> >
一起工作。因此,无法形成"import"调用或将R对象带入C++。
如果你要删除 // [[Rcpp::export]]
并简单地通过 C++ 调用它,然后将 C++ 调用中的对象重新格式化为 Rcpp::List
出来,那么一切都会好起来的。
此外,您确实需要声明 C++11 标志,因为 unordered_map
是 C++11 特定的,通过:
// [[Rcpp::plugins(cpp11)]]
例如
#include <Rcpp.h>
// [[Rcpp::plugins(cpp11)]]
void getPathsFromList(Rcpp::List& pathsList,
std::unordered_map<int, std::vector<int> >& paths ){
Rcpp::List plist(pathsList);
int p=plist.size();
for( int i=0;i<p; i++ ){
SEXP e = plist[i];
Rcpp::NumericVector v(e);
for( int j=0; j<v.size(); j++ ){
paths[i].push_back( v[j] );
}
}
}
我无法弄清楚是什么导致了以下代码中的错误。简而言之,代码尝试遍历列表元素(每个元素都是一个整数向量),并按顺序将它们分配给地图数据结构。
// [[Rcpp::export]]
void getPathsFromList(Rcpp::List& pathsList,
std::unordered_map<int, std::vector<int> >& paths ){
Rcpp::List plist(pathsList);
int p=plist.size();
for( int i=0;i<p; i++ ){
SEXP e = plist[i];
Rcpp::NumericVector v(e);
for( int j=0; j<v.size(); j++ ){
paths[i].push_back( v[j] );
}
}
}
我得到的错误如下:
error: no matching constructor for initialization of 'std::__1::unordered_map<int, std::__1::vector<int, std::__1::allocator<int> >, std::__1::hash<int>, std::__1::equal_to<int>, std::__1::allocator<std::__1::pair<const int, std::__1::vector<int, std::__1::allocator<int> > > > >
我还尝试将上面的 v[j]
显式分配给 int
变量,然后将其推入向量,但没有太大帮助。看来我缺少一些基本的东西,我将不胜感激任何帮助。 (我在 OSX 小牛队。)
不幸的是, Rcpp 不支持与 std:map<int, vector<int> >
一起工作。因此,无法形成"import"调用或将R对象带入C++。
如果你要删除 // [[Rcpp::export]]
并简单地通过 C++ 调用它,然后将 C++ 调用中的对象重新格式化为 Rcpp::List
出来,那么一切都会好起来的。
此外,您确实需要声明 C++11 标志,因为 unordered_map
是 C++11 特定的,通过:
// [[Rcpp::plugins(cpp11)]]
例如
#include <Rcpp.h>
// [[Rcpp::plugins(cpp11)]]
void getPathsFromList(Rcpp::List& pathsList,
std::unordered_map<int, std::vector<int> >& paths ){
Rcpp::List plist(pathsList);
int p=plist.size();
for( int i=0;i<p; i++ ){
SEXP e = plist[i];
Rcpp::NumericVector v(e);
for( int j=0; j<v.size(); j++ ){
paths[i].push_back( v[j] );
}
}
}