C++ int& operator[](string key) 函数使用链表

C++ int& operator[](string key) function using Linked List

对于我最近分配的一个 comsci 项目,我们必须使用链表实现我们自己版本的 STL 地图。在我们的 operator[] 重载函数中,虽然我们不知道如何访问 return 和 "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,严格来说你不能 "implement" 要么带有链表:鉴于标准的性能保证,它们必然是平衡的二叉树。您可以使用 std::map-like 接口 实现一些东西 - 减去那些性能特征 - 通过链表....

此外,更喜欢使用 const std::string& 传递不会在函数内部修改的 string 参数:它避免分配额外的内存和复制文本,只是在函数之后释放它退出。