如何将std :: unordered_set用作vector <vector <int >>以删除重复项

时间:2019-02-18 11:50:55

标签: c++11

我有一个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 >。 考虑到这一点,我必须做些什么更改才能纠正它?

我是一个尝试学习的初学者,所以如果您觉得这个问题很傻,请记住这一点。

1 个答案:

答案 0 :(得分:0)

您正在尝试将不是std::unordered_set<int>的内容插入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;
}