Rコードをc++に変換していますが、データフレームと同じ種類の操作を可能にする同等の(最適な)構造を見つけたいと思いますが、C++です。
操作は次のとおりです。
- 要素(行)を追加する
- インデックスから要素(行)を削除します
- 最小値のインデックスを取得します
例:
a <- data.frame(i = c(4, 9, 3, 1, 8, 2, 7, 10, 6, 6),
j = c(8, 8, 8, 4, 3, 9, 1, 4, 8, 9) ,
v = c(1.9, 18, 1.3, 17, 1.5, 14, 11, 1.4, 18, 2.0),
o = c(3, 3, 3, 3, 1, 2, 1, 2, 3, 3))
a[which.min(a$v), c('i', 'j')] # find lowest v value and get i,j value
a <- a[-which.min(a$v)] # remove row from index
a <- cbind(a, data.frame(i = 3, j = 9, v = 2, o = 2)) # add a row
Rcppを使用しているので、Rcpp :: DataFrameはオプションかもしれませんが(ただし、どのようにすればよいかわかりません)、これらの操作を何度も繰り返す必要があるため、タスクにはかなり時間がかかると思います。 Rに返送する必要はありません。
編集:
目標。ここでの目標はスピードを上げることです。コードをRからC++に変換するのは明らかな理由です(他にもあるかもしれません。それが私が明確にする理由です)。ただし、メンテナンスと簡単な実装が2番目になります。
操作の精度が向上します。アルゴリズムは次のとおりです。配列に大量のデータ(複数行)を追加してから、最小値を抽出して削除します。繰り返す。そのため、並べ替えられたベクトルを探すのではなく、配列が頻繁に更新(追加)されるため、常に最も低いデータをオンデマンドで検索します。速いと思いますが、間違っているかもしれません。