删除向量C ++的重复元素

时间:2020-05-01 15:48:12

标签: c++ vector

所以..我有2个向量:xmax和ymax,它们代表点列表的x和y坐标。我想删除其中xmax [i] == xmax [i-1]和ymax [i] == ymax [i-1]的变量(总而言之,我想删除具有相同的坐标)。这是我正在使用的代码:

std::vector<double> xx, yy;
        for (int i = 0; i < xmax.size(); i++) {
            if (i > 0 && xmax[i] == xmax[i - 1] && ymax[i]==ymax[i-1])
              continue;
            xx.push_back(xmax[i]);
            yy.push_back(ymax[i]);
        }

但是我想知道是否有一种简单的方法来删除变量,而无需为此创建新的向量。

1 个答案:

答案 0 :(得分:2)

我建议切换到一对整数对的单个向量(而不是两个单独的向量):

std::vector<std::pair<int, int>> points = {{1, 1}, {5, 2}, {5, 2}, {7, 10}};

然后您可以使用std::unique()

如果定义比较器功能:

bool point_compare(const std::pair<int, int> &p1, const std::pair<int, int> &p2) {
    return p1.first == p2.first && p1.second == p2.second;
}

然后您可以像使用std::unique()

auto last = std::unique(points.begin(), points.end());
points.erase(last, points.end());

在此处查看实际操作:https://ideone.com/fZM9b2