c++怎么用哈希表在一个数组里面,找出相同元素数量大于3个的元素并把记录下来

c++如何用哈希表在一个数组里面,找出相同元素数量大于3个的元素并把记录下来
例如{1,1,1,3,4,5,3,3,4,3}把{1,1,1},{3,3,3,3}分别用数组保留下来,之前试过用两个for循环实现了,但是如果数据量大了,
速度就不行了,时间复杂度太大,所以想用哈希表,但不太会哈希表用法。

另外假如我要实现的是比较坐标呢,假如坐标数据保存在vector<Point>里,我要比较所有坐标,并找出坐标x,y距离同时少于2的坐标,而且这些坐标点数目大于等于3呢,用哈希表可以实现吗
------解决思路----------------------
//for reference only

#include <map>
#include <vector>
#include <iostream>
#include <random>

std::vector<std::pair<int  , int >>
fuck(const std::vector<int> &v)
{
    std::map<int , size_t> m;
    for(auto const &n : v)
    {
        auto ret = m.insert({n , 1});
        if(!ret.second)
            ++ret.first->second;
    }
    std::vector<std::pair<int , int>> p;
    for(auto const &x : m)
    {
        if(x.second >= 3)
            p.push_back({x.first , x.second});
    }

    return p;
}

int main()
{
    std::vector<int> v;
    std::uniform_int_distribution<int> u(0,100);
    std::default_random_engine e;
    for(size_t i = 0 ; i < 1000 ; ++i)
    {
        v.push_back(u(e));
    }

    auto ans = fuck(v);

    for(auto p : ans)
    {
        std::cout << p.first << " 的个数 : "<< p.second << std::endl;
    }
    return 0;
}

------解决思路----------------------
该回复于2015-06-18 10:38:30被管理员删除