我正在将 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 可能是一个选项(我不知道我会怎么用 which.min 它),但我想这对于任务来说相当慢,因为这些操作需要重复很多次并且我不需要将它运回 R。
编辑:
目标。只是说清楚这里的目标是提高速度。这是将代码从 R 转换为 C++ 的明显原因(可能还有其他原因,这就是我澄清的原因)。但是,维护和易于实施排在第二位。
操作更精确。算法是:向数组中添加大量数据(多行),然后提取最小值并将其删除。重复。这就是为什么我不会选择排序向量,而是总是根据需要搜索最低数据,因为数组经常更新(添加)。我认为它更快,但也许我错了。