【问题标题】:C++ check if the array contains duplicatesC++ 检查数组是否包含重复项
【发布时间】:2022-01-27 01:03:20
【问题描述】:

我有字符串向量,我需要检查数组是否包含重复项:

std::vector<std::string> data{};
const bool notContainsDuplicates = ...;

我可以用标准库解决这个问题吗?

【问题讨论】:

  • 我可以用标准库解决这个问题吗?可能可以,但不确定您的最终目标或实际要求是什么。
  • 能否先对向量(或向量的副本)进行排序?这将使工作变得容易得多。
  • 我无法排序和更改矢量
  • 我的 -1 没有解释问题。

标签: c++ algorithm stl


【解决方案1】:

您可以这样做,使用标准库集来计算唯一条目的数量,如果这与输入数组的长度相同,则没有重复项(另一种选择是使用 unordered_map):

#include <cassert>
#include <string>
#include <string_view> // edit : added
#include <vector>
#include <set>

bool contains_duplicates(const std::vector<std::string>& input)
{
    // edit removed : std::set<std::string> set{ input.begin(), input.end() };
    std::set<std::string_view> set{ input.begin(), input.end() };
    return (set.size() != input.size());
}

int main()
{
    std::vector<std::string> no_dups{ "hello","this","does","not","contain","duplicates" };
    std::vector<std::string> dups{ "hello","this","does","contain","duplicates","hello","this" };

    assert(!contains_duplicates(no_dups));
    assert(contains_duplicates(dups));

    return 0;
}

【讨论】:

  • std::set&lt;std::string_view&gt; 会避免复制字符串
  • 你可以将函数缩减为一行:return std::set&lt;std::string_view&gt;(input.begin(), input.end()).size() != input.size();
  • @AlanBirtles 感谢您的反馈并没有想到这一点。但这肯定会有所改进。
  • 编辑:添加了 string_view 解决方案
猜你喜欢
  • 1970-01-01
  • 2018-04-23
  • 2021-12-14
  • 2017-11-30
  • 2018-11-16
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-20
相关资源
最近更新 更多