【问题标题】:C++ passing a nested unordered_map by reference and manipulating itC++ 通过引用传递嵌套的 unordered_map 并对其进行操作
【发布时间】:2016-02-25 20:03:56
【问题描述】:

我有 2 个类(firstClasssecondClass),其中firstClasssecondClass 的朋友,并且有一个私有嵌套std::unordered_map,我想在@987654326 的函数中访问它@。

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

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 而不是嵌套映射,我可以轻松修改它(添加新元素,或更改某些键的值)。但是,在嵌套地图中我什么都做不了。

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

【问题讨论】:

  • 标题中的引用,代码中的指针。
  • 谢谢。我忘了。我知道我遗漏了一些明显的东西。

标签: c++ unordered-map nested-map


【解决方案1】:

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

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: ?)。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 2011-07-06
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多