如何从矢量中删除重复项?

时间:2014-09-13 06:13:11

标签: c++

我正在编写一个程序,它读取下面表格中的文本文件,将数据导入向量,然后用它进行一些计算。目前,我能够成对导入我的数据,将它们插入到矢量中并对矢量进行排序。但是,当涉及到实际删除重复项时,我的所有努力都失败了,因此我可以将该矢量用于其他目的。 / p>

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

这是目前我的相关代码。如果我在上面的向量上做vec1.size()(只有6行),输出应该是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());

2 个答案:

答案 0 :(得分:2)

似乎您想使用set而不是vector

答案 1 :(得分:-1)

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更改为更大的数字。应该有更强大的方法来做到这一点。