C ++嵌套映射和复制

时间:2019-04-04 08:39:08

标签: c++ stl containers stdmap

我正在基于C ++的算法运行,该算法基于带有迭代和归纳的二叉树计算。

为此,我像这样嵌套地图

typedef map<double, bool> b1d;
typedef map<double, b1d> mb2d;
typedef vector<mb2d> vb3d;

typedef map<double, double> m1d;
typedef map<double, m1d> m2d;
typedef vector<m2d> v3d;

m2d ZY;
v3d * V = new v3d (n+1, m2d(ZY));

mb2d ZYb;
vb3d * Vb = new vb3d (n+1, mb2d(ZYb));

然后我更改值

(*J_tab)[K+1.0][Z+y][W - 1.0/sqrt((double) n)] = V_tmp;
(*J_bool)[K+1.0][Z+y][W - 1.0/sqrt((double) n)] = true;

问题是我得到了很多重复,对于std :: map 很奇怪,正如您在这张图片中看到的那样,我是使用调试器获得的 Debugger 在这张照片中,您可以看到在二度中有很多重复0.6或0.7,在三度中有0.3。

摆脱我发现的重复的唯一方法是将double更改为字符串,即

typedef map<string, bool> b1d;
typedef map<string, b1d> mb2d;
typedef vector<mb2d> vb3d;

进行这些操作

            std::string strZy, strWm, strWp;
            std::ostringstream strsZy, strsWm, strsWp;
            int precision = 5;
            strsZy << fixed << setprecision(precision) << Z+y;
            strsWp << fixed << setprecision(precision) << W + 1.0/sqrt((double) n);
            strsWm << fixed << setprecision(precision) << W - 1.0/sqrt((double) n);
            strZy = strsZy.str();
            strWm = strsWm.str();strWp = strsWp.str();

但是我认为它需要的内存多于两倍和更多的时间,因此它不是最有效的解决方案。

有人知道如何纠正它?或另一种优雅的方式吗?

0 个答案:

没有答案