C ++向量中的唯一值?

时间:2014-11-09 02:16:03

标签: c++ vector unique

我必须创建一个程序,要求用户输入介于10和100之间的20个数字,这些数字将存储在矢量中,但只会存储唯一值。我创建了一个程序来存储范围内的值,但我不知道如何只存储唯一值。这就是我所拥有的:

#include <iostream>
#include <vector>
using namespace std;

void print(vector<int>v);

int main()
{
    vector<int>v;


    int x;
    for (int num = 0; num < 20; num++)
    {
        cout << "Enter number " << (num + 1) << ":";
        cin >> x;
        if (10 < x)
        {
            if (x < 100)

                v.push_back(x);
        }
    }
    print(v);


}

void print(vector<int>v2)
{
    for (int count = 0; count < v2.size(); count++)
    cout << v2[count] << " ";
}

我要感谢大家的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用std::unique

http://www.cplusplus.com/reference/algorithm/unique/?kw=unique

using namespace std;

vector<int> v;
int x;

for (int num = 0; num < 20; num++)
{
    cout << "Enter number " << (num + 1) << ":";
    cin >> x;
    if (10 < x)
    {
        if (x < 100)

            v.push_back(x);
    }
}

sort(v.begin(), v.end());
vector<int>::iterator it;
it = unique(v.begin(), v.end());  

v.resize(distance(v.begin(),it));  

答案 1 :(得分:1)

您可以使用std::setstd::unordered_set来跟踪您已经看过的值。具体来说,insert方法将返回值是否已插入集合中。然后,如果值为new,则只将值推入向量。

答案 2 :(得分:1)

我的解决方案,尝试尽可能少地更改代码(添加4行)。我在命令行上运行了它。

请注意,在声明'cin&gt;&gt;之后x',我添加了一个测试,以确定输入的整数是否已经在向量v中。如果测试成功,则放弃向向量添加输入的整数,对其超出范围的影响类似。 / p>

另请注意,必须包含<algorithm>才能使用find。

只是一点点生锈,我在网上快速搜索,使用'c ++ vector test membership'(当然没有引号:-)作为搜索词。

我认为性能还不是优先考虑的问题,但是如果向量大小远大于20,那么可能值得一个哈希(显然有可比较的<algorithm>变体),给出更多的日志( n)搜索时间而不是线性搜索时间。

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void print(vector<int>v);

int main()
{
    vector<int>v;


    int x;
    for (int num = 0; num < 20; num++)
    {
        cout << "Enter number " << (num + 1) << ":";
        cin >> x;
        if (find(v.begin(), v.end(), x) != v.end()) {
            continue;
        }
        if (10 < x)
        {
            if (x < 100)

                v.push_back(x);
        }
    }
    print(v);


}

void print(vector<int>v2)
{
    for (int count = 0; count < v2.size(); count++)
    cout << v2[count] << " ";
}