【问题标题】:Comparing two containers where order is insignificant比较订单无关紧要的两个容器
【发布时间】:2023-03-15 23:50:01
【问题描述】:

我将参数作为字符串存储到命令中。我现在希望将多个参数存储在标准库或 boost 的容器中。参数的顺序不重要。

例如对于命令 LIST,以下是等效的:

LIST all verbose
LIST verbose all

然后我希望能够比较两个容器,其中["all", "verbose"]["verbose", "all"] 的比较得出true

你会推荐我使用什么容器,我应该如何进行比较?

【问题讨论】:

  • 任何已排序的容器。
  • @ForEveR 是的,这将是一个好方法!
  • std::unordered_set 是最快的解决方案。你有 C++11 吗?

标签: c++ boost std c++98


【解决方案1】:

std::is_permutation(seq1_start, seq1_end, seq2_start) 会做你想做的事,而不用担心它们是如何存储的。 [在 C++11 或 boost 中可用]

但是,这可能是 O(N^2) 操作。

如果您不想在比较时支付这个价格,那么您需要一个订购的容器。然后您可以(例如)使用std::equal(seq1_start, seq1_end, seq2_start) 以线性时间进行比较(O(N))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多