如何在 STL 载体上仅保留重复项<string>?

How to keep only duplicates on a STL vector<string>?

本文关键字:lt string gt 保留 STL      更新时间:2023-10-16

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

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

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

一种明显的方法是浏览输入,并在地图中计数它们。然后浏览地图并输出每个数量大于一个的字符串。

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。如果是真的,那意味着它已经写了,所以不要再写了。