【问题标题】:How to use std::unordered_set to a vector<vector<int>> to remove duplicates如何使用 std::unordered_set 到 vector<vector<int>> 删除重复项
【发布时间】:2019-07-11 19:14:05
【问题描述】:

我有一个包含素数的 std::vector >。我希望消除重复输入,因为矢量内容将被导出到一个文件中,并且应该只包含唯一的素数。

质数将来自某些间隔,通过文件馈送到我的算法,例如(32,345)。可能存在间隔会重叠的情况,例如(54,434),(345,596)。我希望使用 std::unordered_set,因为它对我来说是最有效的。 我已经看到带有 std::vector 的示例,并试图满足我的需要,但无济于事。

这是我尝试的代码,灵感来自 2d 矢量的打印方法。

std::vector<std::vector<int> > sharedAnswersVec;
...
...
std::unordered_set<int> unique_primes;
for (auto i = 0; i < sharedAnswerVec.size(); i++) 
{
    for (auto j = 0; j < sharedAnswerVec[j].size(); j++) 
    {
        unique_primes.insert({ i,j });
        sharedAnswerVec.assign(unique_primes.begin(), unique_primes.end());
        sort(sharedAnswerVec.begin(), sharedAnswerVec.end());
    }
}

sharedAnswerVec 不能是 std::vector,必须是 std::vector<:vector> >。 考虑到这一点,我必须做哪些更改才能纠正它?

我是初学者,如果你觉得这个问题很愚蠢,请记住这一点。

【问题讨论】:

  • “我希望消除重复输入”的重复输入是什么?
  • j &lt; sharedAnswerVec[i].size() 不是j &lt; sharedAnswerVec[j].size()
  • @Caleth 我有一个包含“素数”的 std::vector> >。我希望从重叠间隔中消除“素数”的双重输入。
  • 我的意思是std::vector&lt;int&gt;s 是“质数”,还是ints 是“质数”?如果是ints,您是要从二维std::vector&lt;std::vector&lt;int&gt;&gt; 中删除任何重复的ints,还是只从它们直接包含的std::vector&lt;int&gt; 中删除?
  • @Neil Gatenby 遗憾的是,这个错字不是问题。我得到这个错误代码 Error C2679 binary '=': no operator found which take a right-hand operand of type 'const int' (or there是不可接受的转换)

标签: c++11


【解决方案1】:

您正试图在您的std::unordered_set&lt;int&gt; 中插入一些不是int 的东西。

我不清楚你的“间隔”是什么,或者你在排序时在做什么。也许这有点用处?

#include <iostream>
#include <vector>
#include <set>

int main()
{
    std::vector<std::vector<int> > sharedAnswersVec = {
        {1,2,3,5,7,11,13,17,19,23,29},
        {2,5,11,17,23,29}
    };

    std::set<int> unique_primes;
    for ( const auto& v : sharedAnswersVec )
    {
        for ( auto i : v )
        {
            unique_primes.insert(i);
        }
    }

    for ( auto i : unique_primes )
    {
        std::cout << i << std::endl;
    }
    return 0;
}

【讨论】:

  • 非常感谢!我必须更快地采用 C++11/14。那成功了。扩大区间;我正在阅读一个具有“起始值”和“结束值”的 .xml 文件来搜索素数。没有什么可以保证不会有重叠,例如(300,800) 一个搜索间隔 (500,900) 下一个。这就是我需要排序的原因。但由于它是一个二维向量,我开始认为我应该做一些类似于迭代过程的事情。不必要的复杂事物。事实证明它要简单得多。我真的需要多学习。
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2011-07-20
  • 2020-12-26
  • 1970-01-01
  • 2012-04-22
  • 2017-05-13
  • 2017-02-01
相关资源
最近更新 更多