使用对象的哈希结构

时间:2013-11-27 02:56:21

标签: c++ hash

我获得了一段代码来帮助我完成任务,但是我在解决方案中实现它时遇到了麻烦。这是一段代码:

#include<iostream>
#include<tr1/unordered_set>

using namespace std;
using std::tr1::unordered_set;


struct ihash
    : std::unary_function<int, std::size_t>
{


    std::size_t operator()(const int& x) const
    {
        return x;
    }
};

我有一个对象,我想用它来决定我想要使用的哈希值的大小。我想出了这个:

/*int myhash(const Play & key, int tableSize){
    int hashval = 0;
    string keysize = key.getoTeam()+key.getdTeam();
    for(int i=0;i<keysize.length(); i++){
        hashval = hashval*5 + keysize[i];
    }
    return hashval;
}*/

但是我找不到任何代码示例使用结构来执行类似的哈希表,并且int版本不能使用我的unordered_set声明。我声明它是这样的:

unordered_set<Play, myhash> PlaySet;

任何人都可以帮助我连接点吗?

更新

新错误:main.cpp:38:错误:在'thereturnâ之前预期的unqualified-id

我最终得到了:

struct hashbrowns{
    size_t operator()(const Play & a) const
    {
        string keysize = a.getoTeam()+a.getdTeam();
        size_t seed = 0;
        for(int i=0;i<keysize.length(); i++)
            seed = seed*5 + keysize[i];
    }
    return seed;
};

第38行,返回种子;

1 个答案:

答案 0 :(得分:1)

在更新后的代码中,您的返回值必须更高。现在它在operator()函数之外。