对于我最近分配的一个 comsci 项目,我们必须使用链表实现我们自己版本的 STL map 。在我们的 operator[] 重载函数中,虽然我们不知道如何访问和返回“int&”。
这是我们目前尝试做的:
int& LLMap::operator[](string key){
//return this->myMap.searchforNodeAddress(key)->getPairValue();
return this->myMap.searchforNodeAddress(key)->getPairValueAddress();
}
下面是被调用函数的实现:
PairNode* PairLinkedList::searchforNodeAddress(string desiredKey){
PairNode* currNode = this->getPairHead();
while (currNode != NULL){
if (currNode->getPairKey() == desiredKey){
return currNode;
}
else{
currNode = currNode->getNext();
}
}
}
和
int PairNode::getPairValue(){
return this->value;
}
int* PairNode::getPairValueAddress(){
return &(this->value);
}
我们已经尝试解决这个问题很长一段时间了,但完全被难住了,任何指向正确方向的指示或任何帮助都将不胜感激。谢谢
最佳答案
您可以取消引用地址...
return *myMap.searchforNodeAddress(key)->getPairValueAddress();
...或更改 getPairValue()
...
int& PairNode::getPairValue() // now returns int&
另外,STL map
(小写的“m”)仅限于历史 - 你可能指的是 C++ 标准库 std::map
,但你不能使用链表严格“实现”:鉴于标准的性能保证,它们必然是平衡的二叉树。您可以使用 std::map
-like interface 实现某些东西 - 减去那些性能特征 - 通过链表....
此外,更喜欢使用 const std::string&
传递不会在函数内部修改的 string
参数:它避免分配额外的内存和复制文本, 仅在函数退出后释放它。
关于C++ int& operator[](string key) 函数使用链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33382236/