C++ 通过引用传递嵌套的 unordered_map 并对其进行操作
C++ passing a nested unordered_map by reference and manipulating it
我有 2 个 类(firstClass
和 secondClass
),其中 firstClass
是 secondClass
的朋友,并且有一个私有嵌套 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:
?)。
我有 2 个 类(firstClass
和 secondClass
),其中 firstClass
是 secondClass
的朋友,并且有一个私有嵌套 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:
?)。