Я собираюсь заранее извиниться, поскольку не знаю, как задать этот вопрос, иначе мой заголовок будет лучше.
Я пытаюсь реализовать алгоритм UPGMA из Википедии .Скажем, у меня есть вектор вектора целых чисел.
std::vector<std::vector<int>> test = { {0},{1},{2},{3},{4},{5}}
Где целые числа представляют конкретную строку, которая есть в моей программе.Теперь, скажем, у меня есть определенный ввод, говорящий мне объединить test[0]
и test[3]
вместе, как только они объединены, мы отодвигаем объединенные векторы до конца и удаляем test[0]
и test[3]
, которые выглядели бы какthis:
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} };
Вот где я столкнулся с проблемой, потому что, похоже, я сейчас ввел std::vector<std:vector<int>>
в позицию 3 моего теста.И использование merge = {test[x][0],test[y][0]}
не удастся.Это будет ухудшаться с течением времени.Поскольку у меня могло быть что-то, что потенциально могло бы выглядеть следующим образом:
test = { {1}, {{4,5},{2,{0,3}}} }
Я думаю, что быстро осознаю, что у меня неправильная структура данных для этого, но я абсолютно не знаю, какую структуру данных мне нужно использоватьза это.Какую структуру данных я могу использовать, чтобы легко реализовать это?
Опять прошу прощения за плохой вопрос.