【问题标题】:How to keep only duplicates on a STL vector<string>?如何在 STL 向量<string> 上只保留重复项?
【发布时间】:2016-06-26 15:32:37
【问题描述】:

给定一个 STL 向量,只输出重复项:

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

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

【问题讨论】:

  • 遍历向量。将新项目添加到 std::set。在添加到集合之前测试如果一个字符串已经在集合中,如果是,则将其放入输出向量中。
  • 当心丹尼尔,您的输入甚至都不正确。 "A 而不是 "A"!!
  • 字符串范围是否排序?
  • 使用std::setfind方法
  • 你用{"A","A","A"}做什么?

标签: c++ vector 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);

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

如果(我猜是这样)您只希望每个重复项在输出中出现一次,您可能希望将其更改为布尔映射。当您最初插入一个项目时,布尔值将设置为 false。第二次看到该项目时,您将检查布尔值。当它为假时,写出该项目,并将其设置为真。如果是真的,说明已经写好了,不要再写出来了。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2017-07-03
    • 2019-09-05
    相关资源
    最近更新 更多