我正在基于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 很奇怪,正如您在这张图片中看到的那样,我是使用调试器获得的
在这张照片中,您可以看到在二度中有很多重复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();
但是我认为它需要的内存多于两倍和更多的时间,因此它不是最有效的解决方案。
有人知道如何纠正它?或另一种优雅的方式吗?