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
参数:它避免分配额外的内存和复制文本,只是在函数之后释放它退出。
对于我最近分配的一个 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
参数:它避免分配额外的内存和复制文本,只是在函数之后释放它退出。