【问题标题】:Accessing Each Node in a list that is an index in a vector访问作为向量索引的列表中的每个节点
【发布时间】:2021-02-17 14:41:21
【问题描述】:

我目前正在使用私有数据成员 vector<list<pair<K, V>>> hashTable; 制作哈希表。

我需要访问每个列表,进而访问每个列表以实现各种不同的功能。我目前正在这样做:

for(int i = 0; i < hashTable.capacity(); i++){
        list<pair<K,V>>* listPtr = hashTable[i];
for(pair<K,V>* pairPtr = listPtr->front(); pairPtr != listPtr->end(); pairPtr++){
                pair<K,V> tempPair;
                tempPair.first = pairPtr->first;
                tempPair.second = pairPtr->second;
                insert(tempPair);
            }
        }
}

上面的代码是我的 rehash 函数的一部分。 Insert 插入基于散列函数的对,散列函数基于向量的大小进行散列。这并不重要。我只想知道如何到达每个列表,然后是每一对。

我的问题是,有没有更好的方法来访问向量中的每个列表和对?

【问题讨论】:

  • 首先应该是hashTable.size()。对于向量,容量与大小不同。
  • list&lt;pair&lt;K,V&gt;&gt;* listPtr = hashTable[i]; 无法编译。也许你的意思是list&lt;pair&lt;K,V&gt;&gt;* listPtr = hashTable + i;
  • @john 抱歉,我的意思是将 tempList 键入为 hashTable。那是来自不同功能的 sn-p。你是对的,我应该使用尺寸。我刚刚尝试编译我的代码并看到了这一点。那么,我如何访问列表并因此配对呢?
  • 同上 pair&lt;K,V&gt;* pairPtr = listPtr-&gt;front() 无法编译。
  • 你为什么要将每一对复制到一个临时文件中,然后将它插入到某个东西中?

标签: c++ list vector std-pair


【解决方案1】:

访问每个列表中的每一对的简单方法是

for (const auto& list : hashTable)
{
    for (const auto& pair : list)
    {
        ...
    }
}

但上面代码中的insert 函数让我担心。如果您在修改向量/列表的同时对它们进行迭代,那会改变一些事情。

【讨论】:

  • 天哪,我完全忘记了远程 for 循环。我真的无法将 STL 用于任何作业,所以我忘记了它。你能详细说明这个 for 循环到底在做什么吗?还有,你为什么要引用呢?
  • 插入是我的 rehash 函数的一部分。所以这是我的一个sn-p,将一个tempTable分配给hashTable,清除hashTable,调整它的大小,然后遍历tempTable以获取每一对并使用散列函数插入hashTable。 IT 根据 hashTable 的大小进行散列
  • @Zevias 引用避免复制整个列表(或对),而是 listpair 变量仅引用哈希表中的列表和对。
  • @Zevias 循环只是从头到尾遍历整个哈希表。
  • @Zevias 只要您不修改数据结构,就可以遍历所有内容。如果您正在修改您正在迭代的数据结构,则不能使用范围 for 循环。
猜你喜欢
  • 2021-02-17
  • 1970-01-01
  • 2014-05-29
  • 2020-05-10
  • 2015-09-08
  • 1970-01-01
  • 2011-07-22
  • 2020-07-09
  • 1970-01-01
相关资源
最近更新 更多