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

标签 c++ operator-overloading

对于我最近分配的一个 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/

相关文章:

c++ - Qt - 对象指针 (Class*) 具有重载运算符 << 的 QDataStream

C++ post 运算符导致内存泄漏

c++ - 具有重载方法的可变数据结构

c++ - 在类或函数声明中间的宏

c++ - SFML 2.0 循环 Sprite 显示不止一次

c++ - 重载组合运算符(+ =,-=,* =和/=)。不计算应如何

c++ - 为什么没有 std::move 就不会调用 move 构造函数?

c++ - 将带有 malloc 指针的类分配到映射容器中

c# - 对于具有多个 == 运算符覆盖的类,空检查是不明确的

C# 编译器错误 : allows for conversion from Nullable<decimal> to decimal