在C ++中查找向量中出现的数字的数量

时间:2014-01-13 08:28:55

标签: c++ vector stl

我有一个整数向量。其中包含数字。我想计算此向量中每个数字的出现次数。那么这样做的最佳方式是什么。由于我是Vector的新手,请告诉我任何最佳方法。

3 个答案:

答案 0 :(得分:3)

您可以使用由std :: unordered_map实现的哈希表。例如:

#include <unordered_map>
#include <vector>

void count_occurrence(std::unordered_map<int,int>& m, std::vector<int>& v){
    for (auto itr = v.begin(); itr != v.end(); ++itr){
        ++m[*itr];
    }
}

//...somewhere else
//you already have std::vector v filled
std::unordered_map<int,int> m;
count_occurrence(m, v);

//print the number of occurrences of 1
std::cout<<m[1]<<std::endl;

答案 1 :(得分:1)

您可以对矢量的元素进行排序

通过向量迭代

将当前整数存储为x

将当前索引与之前的索引进行比较。

如果它们相等,则将另一个变量增加为f

如果它们不相等,请再次开始循环

这当然不是一步一步的指示,但它包含足够的方向让你前进

答案 2 :(得分:1)

查找数组/列表/向量/等中存储的许多整数的模式。其中 v 是DS,而 num 是整数的数量。 您可以使用以下技术: 简单而清醒。

    i = 0;
    int m = 0, mode, c = 0, nc = 0;
    while(i<num)
    {
        c = 0;
        nc = v[i];
        c++;
        i++;
        while(nc == v[i])
        {
            c++;
            i++;
        }

        if(m < c)
        {
            m = c;
            mode = nc;
        }
    }