c++ - 传递对 C++ 中的映射的引用

标签 c++ stl reference pass-by-reference

我希望传递对 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 is a Node with host=1 and n2 is a Node with host=2

主机:2 地址:0x7fff5fbfe580

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

最佳答案

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

您需要使用指针映射:

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

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

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

相关文章:

c++ - 浮点舍入

c++ - STL std::sort() 使用 Introsort,但它是如何工作的?

c++ - 在 map : How to clear inner map using iterators? 中映射

c++ - 无法理解 STL 映射的行为

引用结构的c++类构造函数

C++ 通过引用传递

c++ - 在指向对象的指针 vector 中取消引用

c++ - 我怎么知道我上次的指示

c++ - open gl基本程序报错?

c++ - 递减和取模 - 如何在一行代码中递减负值