C++通过引用传递嵌套的无序映射并对其进行操作

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

本文关键字:映射 操作 无序 引用 嵌套 C++      更新时间:2023-10-16

我有两个类(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:?)。