如何只在STL向量<string>上保留重复项?

时间:2016-06-26 15:32:38

标签: c++ vector stl

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

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

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

1 个答案:

答案 0 :(得分:1)

一种显而易见的方法是遍历输入,并在地图中计算它们。然后遍历地图并输出计数大于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);

另一种可能性(在您需要维护原始顺序时尤其有用)是在遍历输入时将字符串插入到集合(或unordered_set)中。然后,如果失败,则字符串已经在集合中,因此您将其写入输出。

如果(因为我猜测是这种情况)你只希望每个重复的项目在输出中出现一次,你可能想要将其更改为布尔地图。最初插入项目时,布尔值将设置为false。第二次看到该项时,您将检查布尔值。当它为假时,写出该项,并将其设置为true。如果这是真的,那就意味着它已经写好了,所以不要再把它写出来。