Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ 如何在STL向量上仅保留重复项?_C++_Vector_Stl - Fatal编程技术网

C++ 如何在STL向量上仅保留重复项?

C++ 如何在STL向量上仅保留重复项?,c++,vector,stl,C++,Vector,Stl,给定STL向量,仅输出重复项: INPUT {"A","A","B","B","C","D","E","F"}; OUTPUT {"A","B"} 我是stl的新手,所以不知道从哪里开始。有人能给我指出正确的方向吗?一个明显的方法是遍历输入,并在地图中计算它们。然后遍历映射并输出计数大于1的每个字符串 map<string, int> counts; for (auto const &s : input) ++counts[s]; for (auto const

给定STL向量,仅输出重复项:

INPUT {"A","A","B","B","C","D","E","F"};
OUTPUT {"A","B"}

我是stl的新手,所以不知道从哪里开始。有人能给我指出正确的方向吗?

一个明显的方法是遍历输入,并在地图中计算它们。然后遍历映射并输出计数大于1的每个字符串

map<string, int> counts;

for (auto const &s : input)
    ++counts[s];

for (auto const &s : counts)
    if (s.second > 1)
        outputs.push_back(s.first);
如果需要保持原始顺序,另一种特别有用的方法是在遍历输入时将字符串插入到集合或无序集合中。如果失败,字符串已经在集合中,因此您将其写入输出


如果像我猜想的那样,您只希望每个重复项在输出中出现一次,那么您可能需要将其更改为布尔映射。最初插入项时,布尔值将设置为false。第二次看到该项时,将检查布尔值。如果为false,则写出该项,并将其设置为true。如果它是真的,这意味着它已经被写入,所以不要再写出来。

迭代向量。将新项目添加到std::集合。在添加到集合测试之前,如果集合中已经存在字符串,则将其放入输出向量。注意,Daniel,您的输入甚至都不正确。A而不是A!!字符串的范围是否已排序?使用std::set的find方法如何处理{A,A,A}?