2016-07-28 23 views
-1

次のコードで何が原因で発生しているのかわかりません。簡単に説明すると、コードはリスト要素(それぞれ整数のベクトルです)をループし、それらを順番にマップデータ構造に割り当てようとします。基本Rcppリスト入力でエラーが発生しました

// [[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> > > > > 

私はまた、明示的にint変数に上記v[j]を割り当てた後、ベクターにそれを押してみましたが、非常に助けをしませんでした。私は何か基本的なものが欠けているように見えます。 (私はOSXマーベリックスにしています。)

+0

ご希望のサンプルデータを追加してください。 – coatless

答えて

1

std:map<int, vector<int> >で動作するようにRcppサポートは、残念ながらありません。したがって、「インポート」コールまたはRオブジェクトをC++に持ち込むことはできません。

// [[Rcpp::export]]を削除し、単にC++経由で呼び出してから、C++でオブジェクトを再フォーマットしてRcpp::Listを呼び出すと、すべて正常になります。

例えば
// [[Rcpp::plugins(cpp11)]] 

unordered_mapを経由して、特定のC++ 11であるので、

また、あなたはC++ 11のフラグを宣言する必要があります

#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]); 
     } 
    } 

} 
+0

ありがとう! – mskb

関連する問題