Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从向量中删除重复项?_C++ - Fatal编程技术网

C++ 如何从向量中删除重复项?

C++ 如何从向量中删除重复项?,c++,C++,我正在写一个程序,它读取一个如下形式的文本文件,将数据导入一个向量,然后用它进行一些计算。目前,我能够成对导入数据,将它们插入向量并对向量进行排序。。然而,我所有的努力都失败了,当涉及到实际删除重复项时,我可以将向量用于其他目的 1 4 5 6 4 5 4 5 5 4 6 7 ... 这是我目前的相关代码。如果我对上面的向量(仅6行)执行vec1.size(),则输出应为5。然而,我尝试的每个文本文件的输出都是1,我不明白为什么 while( g

我正在写一个程序,它读取一个如下形式的文本文件,将数据导入一个向量,然后用它进行一些计算。目前,我能够成对导入数据,将它们插入向量并对向量进行排序。。然而,我所有的努力都失败了,当涉及到实际删除重复项时,我可以将向量用于其他目的

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());
while(getline(fs1,instrng)){
istringstream s1(仪表);
INTA,b;
s1>>a>>b;
配对1=配对(a,b);
vec1.推回(对1);
排序(vec1.begin(),myvec1.end());
auto last=std::unique(vec1.begin(),vec1.end());
vec1.erase(last,vec1.end());

似乎您希望使用
集合
而不是
向量

std::map过滤器;
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;
}
while(getline(fs1,instrng)){ istringstream s1(仪表); INTA,b; s1>>a>>b; 配对1=配对(a,b); int较大=(a>b?a:b); 小整数=(a>b?b:a); int键=更大*10000+b; 过滤器[键]=对1; }
在这个映射上迭代应该可以让您提取
你想要的向量。如果你设想更多的条目,你可能想把任意分配的10000改成一个更大的数字。应该有更可靠的方法来做到这一点。

使用。@juanchopanza你应该把它作为一个answer@Zaffy我没有,因为已经有太多重复的了。@juanchopanza我不同意这个q的标记OP明确表示:“程序还需要将“15”和“51”这样的数字计算为一。”这在你链接到的帖子中没有讨论。谢谢@balajeerc,我同意。这里的要求略有不同。这不仅仅是删除基本的重复项。我必须为这个程序使用一个向量,否则我会使用一个集合,而且,我需要处理像(15)和(51)这样的数据对,并将它们作为一个来计算。@kal1nga(1 5)等于(5 1),你应该定义一个新的数据类型(例如一对)来保持它的两个值。如果你解释为什么你不能使用一个集合而不是一个向量,那么这将是有用的。无论如何,从集合中构造向量并不困难。在您的示例中,您应该获得4行,而不是您所说的5行…@kal“我必须使用向量”这是为什么?我在这里重新表述了这个问题,而且我不能使用map函数来实现我的目的。我必须操作最后三行,使其立即工作std::map不是一个函数