【发布时间】:2018-10-28 13:24:35
【问题描述】:
我要提前道歉,因为我不知道如何问这个问题,否则我的标题会更好。
我正在尝试实现UPGMA Algorithm from Wikipedia。假设我有一个整数向量的向量。
std::vector<std::vector<int>> test = { {0},{1},{2},{3},{4},{5}}
整数代表我程序中的特定字符串。现在,假设我有特定的输入告诉我将 test[0] 和 test[3] 合并在一起,一旦它们合并,我们将合并的向量推回最后,我们删除 test[0] 和 test[3] 看起来像这个:
test = { {1}, {2}, {4}, {5}, {0,3} }
这很容易通过以下代码实现:
int x = 0;
int y = 3;
merge = {test[x][0],test[y][0]}; // merge is a std::vector<int>
test.push_back(merge);
test.erase(test.begin() + x)
test.erase(test.begin() + y - 1); // -1 since the first erase shifts everything over
当我想合并test[1] 和test[4] 时会出现问题。期望的结果如下所示:
test = { {1}, {4}, {5}, {2,{0,3} };
这是我遇到问题的地方,因为我现在似乎在我的测试的位置 3 中引入了 std::vector<std:vector<int>>。并且使用merge = {test[x][0],test[y][0]} 将失败。随着时间的推移,这种情况会变得更糟。因为我可能有一些看起来像这样的东西:
test = { {1}, {{4,5},{2,{0,3}}} }
我想我很快意识到我有错误的数据结构,但我完全不知道我需要为此使用什么数据结构。我可以使用什么样的数据结构来轻松实现这一点?
再次,我为这个不好的问题道歉。
【问题讨论】:
标签: c++ vector data-structures c++14 c++17