C++ 通过引用传递嵌套的 unordered_map 并对其进行操作

C++ passing a nested unordered_map by reference and manipulating it

我有 2 个 类(firstClasssecondClass),其中 firstClasssecondClass 的朋友,并且有一个私有嵌套 std::unordered_map,我想在 secondClass.

的函数中访问它

所以基本上代码是这样的:

class secondClass;
typedef unordered_map STable<unsigned, unordered_map<unsigned, double> > NESTED_MAP;

class firstClass {
    friend class secondClass;

    void myfunc1(secondClass* sc) {
        sc->myfunc2(&STable);
    }

private:
    NESTED_MAP STable;
};

class secondClass {
public:
    void myfunc2(NESTED_MAP* st) {
        //Here I want to insert some elements in STable.
        //Something like:
        st[1][2] = 0.5;
    }
};

int main() {
    firstClass  fco;
    secondClass sco;
    fco.myfunc1(&sco);
    return 0;
}

关键是,如果我使用简单的 std::unordered_map 而不是嵌套映射,我可以轻松修改它(添加新元素,或更改某些键的值)。但是,在嵌套地图中我无能为力。

我知道这应该是微不足道的,但我不知道如何解决。 有什么想法吗?

您不是在通过引用传递,而是在传递指针。这是使用参考的版本:

void myfunc2(NESTED_MAP &st)
{
    st[1][2] = 0.5; // valid, st dereferenced implicitly
}

并且在没有地址运算符的情况下调用它:

sc->myfunc2(STable);

如果你真的想传递一个指针,它需要显式解引用:

void myfunc2(NESTED_MAP *st)
{
    (*st)[1][2] = 0.5;

    // or, if you like:
    st->operator[](1)[2] = 0.5;
}

在您发布的代码中,您 firstClass 只有私有成员(忘记了 public: ?)。