【问题标题】:Find unique quadruplets in C++ [closed]在 C++ 中查找唯一的四联体 [关闭]
【发布时间】:2018-03-07 09:47:57
【问题描述】:

所以,我需要在 C++ 中找到唯一的四元组。任何想法都会有所帮助

输入 1 : [1, 0, 2, 3], [2, 0, 1, 3], [4, 5, 6, 7], [8, 9, 10, 11]

输出 1 : [2, 0, 1, 3], [4, 5, 6, ,7], [8, 9, 10, 11]

由于 [1,0,2,3] 和 [2,0,1,3] 都包含相同的元素,因此任何一个都可以在输出中

输入 2 : [2, 0, 1, 3], [4, 5, 6, ,7], [8, 9, 10, 11], [15,16,17,18]

输出 2 : [2, 0, 1, 3], [4, 5, 6, ,7], [8, 9, 10, 11], [15,16,17,18]

我无法初始化集合 (int,int,int,int)。知道如何获得独特的吗?


针对要求更多定义问题的人的更新: 四元组是该问题的 4 个整数的组合。问题状态是从所有给定的四元组中找到唯一的四元组。一个四元组 (a,b,c,d) 是唯一的,如果没有其他四元组的所有元素都与这个相同,即由 (a,b,c,d) 的排列形成的任何四元组不是唯一的。四元组 (a,b,c,d) 和 (a,d,b,c) 相同,而四元组 (a,b,c,d) 和 (a,e,f,b) 则不同。如果四元组包含至少 1 个元素,这两个元素都不相同,则它们是唯一的。

【问题讨论】:

  • 只需将std::unique() 与一个二元谓词一起使用,如果它们包含“相同的元素”,则它们将两个“四元组”视为相等。
  • @Peter 在调用std::unique之前必须对元素进行排序
  • 独特的四胞胎对是什么意思?我对你作业中的 pair 这个词有疑问
  • 我理解这个问题。您是否有一位老师限制您可以使用哪些 C++ 和 STL 功能?如果是这样,你是如何受到阻碍的?接下来,向我们展示您迄今为止所做的工作。发布minimal reproducible example

标签: c++ algorithm unique std-pair


【解决方案1】:

编写一个比较器,在比较之前对四元组中的整数进行排序。

struct CompareQuads
{
    bool operator()(Quad x, Quad y) const
    {
        // sort x integers
        ...
        // sort y integers
        ...
        // return true if x < y (lexicographically)
        ...
    }
};

使用std::set 中的比较器来消除重复项。

std::set<Quad, CompareQuads> s;

将所有四边形添加到s,重复项将被删除。遍历s 并打印剩下的。

【讨论】:

  • 我正在考虑为一组中的所有数字定义某种散列函数,但这种解决方案几乎可以肯定更具可读性和更快。
  • 我们如何添加四边形来设置?很抱歉,我无法从文档中弄清楚 cplusplus.com/reference/set/set
  • @pranavhd s.insert(quad);
  • 好吧,我现在感觉很蠢,不过我会很感激ideone.com/QoOMWG
  • @pranavhd 就像我说的你需要std::set&lt;Quad, CompareQuads&gt; s;。 std::set 不会通过魔法删除重复项,您必须告诉它是什么重复项。
猜你喜欢
  • 2014-10-14
  • 2016-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
相关资源
最近更新 更多