无需迭代即可访问flattened2d

时间:2013-07-24 15:11:08

标签: tbb

我有一个

flattened2d<VecType> bids;

我只想在不使用迭代器的情况下使用[]运算符进行访问。我不想复制矢量。有没有一种有效的方法来获得flattened2d的索引(例如0)?

1 个答案:

答案 0 :(得分:2)

flattened2d没有随机访问方法。您可以使用随机访问运算符[]构建自己的类似数据结构。对于n个子容器,构造两个向量。

  • A [k]应指向第k个子容器。
  • B [k]应包含A [j] - &gt; size()的总和0 <= j

给定这些向量,operator []可以计算为

// Find j such that A[j] is the subcontainer containing element [i]
size_t j = lower_bound(B.begin(),B.end(),i)-B.begin();
// Index the subcontainer. 
return A[j][i-B[j]]

请注意,访问时间将为O(P),其中P是子容器的数量。如果有很多访问,最好还是将子容器复制到一个连续的容器中。