У меня есть два вектора, которые связаны между собой. Вектор имеет одинаковый размер, и его содержимое соответствует 1: 1 в том смысле, что он может быть рефакторингом в один вектор некоторой структуры. Я пытаюсь удалить дубликаты на первом векторе, и это должно совпадать во втором векторе.
v1 = [5 4 3 7 6 5 2 3]
v2 = [0 1 2 3 4 5 6 7]
Так как 5 и 3 повторяются в v1
, результат должен быть
v1 = [5 4 3 7 6 2]
v2 = [0 1 2 3 4 6]
Порядок может быть изменен, если отношение одинаково.
Я пытаюсь добиться этого с помощью библиотеки range-v3.
std::vector<unsigned int> v1;
std::vector<double> v2;
auto v1Andv2 = range::views::zip(v1, v2);
ranges::sort(v1Andv2)
// ranges::unique(v1Andv2) // Doesnt compile
auto lastIt = std::unique(std::begin(v1Andv2), std::end(v1Andv2), [](const auto &a, const auto &b) {
// Since the second value of the zip is a double and could be slightly different,
// I am only interested in first one
return std::get<0>(a) == std::get<0>(b);
});
v1.erase(???, std::end(v1));
v2.erase(???, std::end(v2));
Понятия не имею, что мне положить в ??? чтобы получить итератор каждое значение в zip. Кроме того, почему диапазоны :: действия :: уникальные не работают в этом случае?