2015-10-28 25 views
1

對於comsci項目,我最近被分配,我們有使用鏈表來實現自己的STL地圖的版本。在我們的operator []重載函數中,雖然我們不知道如何訪問並返回「int &」。C++ 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); 
} 

我們一直試圖找出相當長一段時間現在,並完全難住,任何指針在正確的方向n或任何援助都將不勝感激。謝謝

回答

2

您可以取消引用地址...

return *myMap.searchforNodeAddress(key)->getPairValueAddress(); 

...或更改getPairValue() ...

int& PairNode::getPairValue() // now returns int& 

另外,在STL map(小寫字母 「M」)的限於歷史 - 您可能指的是C++標準庫std::map,並且您無法嚴格「實施」鏈接列表:它們必須是平衡的二叉樹,因爲標準的性能保證。您可以實現與std::map接口東西 - 零下那些性能特性 - 在一個鏈表....

而且,更喜歡通過string參數,將不使用const std::string&函數內修改:它避免分配額外的內存並複製文本,只有在函數退出後才能釋放它。