参考内部索引?

Posted

技术标签:

【中文标题】参考内部索引?【英文标题】:Reference to inner index? 【发布时间】:2011-02-11 05:32:41 【问题描述】:

假设我有

vector<vector<int> > a;

索引为

a[i][j] = stuff;

其中 i 是“外部”,j 是“内部”...

然后创建对“外部”向量的引用很容易:

vector<int>& b = a[x];

有没有一种很好的方法来创建对内部的引用?

vector<int>& b = a[<don't know>][x];

谢谢。

【问题讨论】:

我不明白这个问题。 a 是外部向量,所以a[x] 访问内部向量之一(不只有一个内部向量,因为您已经定义了一个向量向量)。再往下一层,你会得到单个整数。 这个问题令人困惑。如何将 int 引用到 vector. 【参考方案1】:

不幸的是,不,没有直接的方法来创建这样的引用,因为编译器将其视为

a.operator[] (/* ... don't know ... */).operator[] (x);

这只有在第一次调用 operator [] 时实际上交回了 vector 时才有意义。

但是,您可以通过引入一个专门处理该行为的新类来假装这种行为。这个想法是让这个类存储第二个索引并提供一个operator[] 函数,给定第一个索引,在vector 中查找实际值。这是一个例子:

class IndexReverser  // Or, your favorite name
public:
    IndexReverser(vector< vector<int> >& v, size_t index);

    int& operator[] (size_t firstIndex);

private:
    vector< vector<int> >& realVector;
    const size_t secondIndex;
;

IndexReverser::IndexReverser(vector< vector<int> >&v,
                             size_t index) : realVector(v), secondIndex(index) 
    // Handled in initialization list

int& IndexReverser::operator[] (size_t firstIndex) 
    return realVector[firstIndex][secondIndex];

然后你可以这样写,例如:

IndexReverser ir(a, j);
ir[i] = 137;

您可能需要提供一个孪生类来处理const 向量,并且可能希望根据所存储元素的类型参数化整个结构。我不确定这是否是您要查找的内容,但它至少表明原则上您可以获得所需的行为。

【讨论】:

谢谢,这回答了我的问题。我将编写您的 IndexReverser 类的模板化版本。【参考方案2】:

这一行:

vector<int>& b = a[x];

不是对外部向量的引用,而是对内部向量之一的引用。另请注意,可能存在许多内部向量。

这里是如何获得对外部向量的引用(虽然一般来说它是没有意义的):

vector<vector<int> > &outer = a;

获取对其中一个内部向量的引用如下所示:

vector<int> &inner = a[x];

【讨论】:

以上是关于参考内部索引?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB中地理空间索引的内部机制

实现具有内部可变性的索引

mysql内部组件架构,索引管理,视图view

SQL Server索引内部结构:SQL Server索引的阶梯级别10

如何从模型内部选择 QTableView 索引或行

Elasticsearch系列---shard内部原理