C++通过引用传递嵌套的无序映射并对其进行操作
C++ passing a nested unordered_map by reference and manipulating it
我有两个类(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:
?)。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么在popback()操作之后,它仍然打印完整的矢量
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 将操作名称映射到 C++ 中的类类型
- C++将矩阵列映射到秩 - 位操作
- std::按值或指针映射操作
- 使用指向 STL 映射的指针的操作
- 映射平台特定的可互操作类型
- 使用结构作为映射的键和值.find() 操作给出错误
- 如何实现可变元组映射操作
- C++通过引用传递嵌套的无序映射并对其进行操作
- C++映射键/迭代器操作
- 是否存在STL或BOOST映射,如查找和弹出操作的容器
- 二维哈希映射的操作