对于我最近被分配的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);
}
我们一直试图解决这个问题已经有一段时间了,并且完全被困住了,任何指向正确的方向或任何协助都会非常感激。谢谢
答案 0 :(得分:2)
你可以取消引用地址......
return *myMap.searchforNodeAddress(key)->getPairValueAddress();
...或更改getPairValue()
...
int& PairNode::getPairValue() // now returns int&
另外,STL map
(小写" m")仅限于历史记录 - 您可能意味着C ++标准库std::map
,并且您不能严格遵守#34;实施"要么是链接列表,要么是标准的性能保证,它们必然是平衡的二叉树。你可以通过链接列表实现std::map
- 比如接口 - 减去那些性能特征......
此外,更喜欢使用string
传递未在函数内修改的const std::string&
参数:它避免分配额外的内存并复制文本,只是在函数后释放它退出。