0

我有一个

flattened2d<VecType> bids;

我只想使用 [] 运算符访问而不使用迭代器。我不想复制向量。有没有一种有效的方法来获取 flattened2d 的索引(例如,0)?

4

1 回答 1

2

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

  • A[k] 应该指向第 k 个子容器。
  • B[k] 应该包含 A[j]->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 是子容器的数量。如果有很多访问,你最好还是将子容器复制到一个连续的容器中。

于 2013-07-25T14:35:45.680 回答