如何从矢量中删除重复项

How to remove duplicates from a vector?

本文关键字:删除      更新时间:2023-10-16

我正在编写一个程序,该程序读取下表中的文本文件,将数据导入到向量中,然后用它进行一些计算。目前,我可以成对导入数据,将它们插入到向量中并对向量进行排序。。然而,当我真正删除重复项时,我所有的努力都失败了,这样我就可以将矢量用于其他目的。

1     4
5     6
4     5
4     5
5     4
6     7
...

这是目前我的相关代码。如果我对上面的向量(只有6行)执行vec1.size(),那么输出应该是5。然而,我尝试的每一个文本文件,我都会得到1的输出,我不明白为什么。。

while( getline( fs1, instrng ) ) {
    istringstream s1(instrng);
    int a, b;
    s1 >> a >> b;
    pair<int,int> pair1 = make_pair(a,b);
    vec1.push_back( pair1 );
    sort( vec1.begin(), myvec1.end() );
            auto last = std::unique(vec1.begin(), vec1.end());
            vec1.erase(last, vec1.end());

似乎要使用set而不是vector

std::map<int, pair<int, int>> filter;
while( getline( fs1, instrng ) ) {
    istringstream s1(instrng);
    int a, b;
    s1 >> a >> b;
    pair<int,int> pair1 = make_pair(a,b);
    int larger = (a>b?a:b);
    int smaller = (a>b?b:a); 
    int key = larger*10000 + b;
    filter[key] = pair1;
}

在这个地图上迭代应该可以提取你想要的矢量。如果您设想更多的条目,您可能希望将任意分配的10000更改为更大的数字。应该有更有力的方法来做到这一点。