gpt4 book ai didi

c++ - 从 B 类访问 A 类 map

转载 作者:行者123 更新时间:2023-11-30 05:28:19 25 4
gpt4 key购买 nike

我有两个类 A 类和 B 类。A 类有一个类型为 map<int,int> 的映射。 .

在类A中,我有如下定义,

   typedef std::map<int, int> mymap;

mymap MYMAP;

A A_OBJ;

// did some insert operations on A_OBJ's MYMAP

我在 A 类中还有以下函数,当 B 调用时,会将 A 的 MYMAP 作为拷贝返回给 B 类。

A::mymap A::get_port(){

// Returns A's map
return this -> MYMAP;

}

在B类中,

void B::initialize_table(){

A::mymap port_table = A_OBJ.get_port();

cout<< "size of ports table at A is"<<port_table.size());

}

代码编译没有任何问题。唯一的问题是,即使我向 A 的 map 插入一些数据,B 也始终显示 A 的 map 有 0 个元素。

我在 B 有一个计时器,它调用 initialize_table()每 2 秒,它应该从 A 获取 map 的最新拷贝。不确定哪里出错了。

感谢任何帮助。谢谢。

最佳答案

您是正确的,您正在创建 std::map 的拷贝。解决此问题的方法是初始化对 map 的引用。

考虑以下 stub :

#include <iostream>
#include <map>

using my_map = std::map<int, int>;

struct A {
A() : m() {}
my_map& get_my_map() { return m; }
my_map m;
};

struct B {
B() : a() {}
void initialize_map_ref();
void initialize_map_val();
void print_index_42() { std::cout << a.get_my_map()[42] << '\n'; }
A a;
};

void B::initialize_map_ref() {
// notice this is a reference
my_map& m = a.get_my_map();
m[42] = 43;
}

void B::initialize_map_val() {
// notice this is a copy
my_map m = a.get_my_map();
m[42] = 43;
}

int main() {
B b;
b.initialize_map_ref();
b.print_index_42();
return 0;
}

B::initialize_map_ref 初始化一个引用(即对 a 中的 map 的引用),其中 B::initialize_map_val 创建一个复制并初始化拷贝。拷贝在调用后死亡,因此在调用之外,m[42] == 0。另一方面,引用初始化会持续存在,因为您更改了对底层对象的引用。

Ideone: With referencewith value .

关于c++ - 从 B 类访问 A 类 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com