【发布时间】:2020-08-03 14:16:42
【问题描述】:
我有两个相关的向量。向量具有相同的大小,并且它们的内容匹配 1:1,因为它可以被重构为某个结构的单个向量。我正在尝试删除第一个向量上的重复项,这应该与第二个向量匹配。
v1 = [5 4 3 7 6 5 2 3]
v2 = [0 1 2 3 4 5 6 7]
由于v1中重复了5和3,所以结果应该是
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 中的每个值的迭代器。 另外,为什么 range::actions::unique 在这种情况下不起作用?
【问题讨论】: