gpt4 book ai didi

c++ - 在 C++ 中传递对 map 的引用

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:48 27 4
gpt4 key购买 nike

我希望传递对 map 的引用,而不是让 map 将其放置在其他地方 - 这是我正在使用的内容:

map<string, Node> _neighbors; // Instance Variable


Node& neighbor(Node& neighbor) {
cout << "HOST: "<< neighbor.host() << " ADDRESS: " << &neighbor << endl;
string key = this->getKey(neighbor);

if(!_neighbors.count(key)) {
_neighbors[key] = neighbor;
cout << "HOST (AFTER): "<< _neighbors[key].host() << " ADDRESS: " << &_neighbors[key] << endl;
neighbor.neighbor(*this);
}

return *this;
}

输出:当我调用 n1.neighbor(n2);//n1 是 host=1 的节点,n2 是 host=2 的节点

主机:2 地址:0x7fff5fbfe580

主机(之后):2 地址:0x100100128

最佳答案

您不能在 STL 容器中存储引用。容器存储对象,引用不是对象(另外,容器中存储的对象必须是可赋值的,引用是不可赋值的)。

您需要使用指针映射:

std::map<std::string, Node*>

另外,请注意所有权问题。您需要确保对象不会被销毁,直到每个引用它们的人都使用完它们为止。如果您在多个地方使用对象,请考虑使用共享所有权智能指针(如 shared_ptr)来为您管理对象生命周期。 C++ 中的手动资源管理充满了危险,应不惜一切代价避免。

关于c++ - 在 C++ 中传递对 map 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com