要在C ++中实现一个开放的哈希表,我想我会定义一个包含指向包含数据的向量的指针的向量。为简单起见,假设我想要一个可以存储int
的哈希表。我以为我需要一个vector< vector<int>* >
。
结果数据结构可能如下所示:
[index 0] 8,6,2
[index 1](空)
[index 2] 9,12,15,28,1
我本可以创建一个vector<int>
指针的静态数组,但我希望能够随着时间的推移添加更多的索引。
要写出元素,我想做这样的事情:
for (unsigned int i = 0; i < myHashtable.size(); i++) {
cout << "[index " << i << "]";
for (unsigned int j = 0; j < myHashtable[i]->size(); j++) {
cout << " " << *(myHashtable[i])[j];
}
cout << "\n";
}
此代码无法编译。解决*(myHashtable[i])[j]
的正确方法是什么?
答案 0 :(得分:7)
(*myHashtable[i])[j]
下标运算符([]
)绑定比取消引用(*
)更紧密(参见http://www.cppreference.com/wiki/operator_precedence)。因此,您需要使用括号强制绑定。
顺便说一下,你可以这样写内循环:
for (vector<int>::iterator it = myHashtable[i]->begin();
it != myHashtable[i]->end(); ++it)
{
cout << " " << *it;
}
答案 1 :(得分:3)
尝试(*(myHashTable[i]))[j]
。
答案 2 :(得分:3)
简单(* myHashtable [i])[j]
答案 3 :(得分:2)
(*myHashtable[i])[j]
因为[]
运算符的优先级高于*
运算符。