C++ 如何正确使用无序的U图C++;

C++ 如何正确使用无序的U图C++;,c++,c++11,dictionary,hashmap,C++,C++11,Dictionary,Hashmap,我想用一个自定义哈希函数创建一个std::unordered_map。不过,我很难确定在哪里声明/如何使用我的无序地图 情况是这样的。我有一个名为Object的类。它非常简单,只包含一个整数id。以下是头文件: // Object.hpp class Object { public: Object(); ~Object(){}; int Id(); void setId(int i); private:

我想用一个自定义哈希函数创建一个
std::unordered_map
。不过,我很难确定在哪里声明/如何使用我的
无序地图

情况是这样的。我有一个名为
Object
的类。它非常简单,只包含一个整数
id
。以下是头文件:

// Object.hpp
class Object {
    public:
        Object();
        ~Object(){};
        int   Id();
        void setId(int i);
    private:
        int id;
};
// DataSet.hpp
struct HashKey {
    unsigned int hash(unsigned int x) {
        x = ((x >> 16) ^ x) * 0x45d9f3b;
        x = ((x >> 16) ^ x) * 0x45d9f3b;
        x = ((x >> 16) ^ x);
        return x;
    }
};

class DataSet{

public:
    std::unordered_map<int,Object*,HashKey> objects;

    DataSet();
    ~DataSet();

    int addObject(Object *object);
    void clear();
    int deleteObject(int id);
    int getSize();
};
我有一个名为
DataSet
的类,它充当一个容器,将容纳数百万个
对象。为了简单起见,我只希望能够构造一个
数据集
,向
数据集
添加一个
对象
,从
数据集
中按ID删除一个
对象
,清除
数据集
,并获得
数据集
的大小

在我的
数据集
类中,我想要(并且被要求)使用的结构是一个
std::unordered_映射
。对于这个映射,我希望键是与
对象
关联的整数id,实际的
对象*
本身作为值。最后,我有一个hash函数,我想用于
无序映射
。以下是我当前在
数据集
头文件中的内容:

// Object.hpp
class Object {
    public:
        Object();
        ~Object(){};
        int   Id();
        void setId(int i);
    private:
        int id;
};
// DataSet.hpp
struct HashKey {
    unsigned int hash(unsigned int x) {
        x = ((x >> 16) ^ x) * 0x45d9f3b;
        x = ((x >> 16) ^ x) * 0x45d9f3b;
        x = ((x >> 16) ^ x);
        return x;
    }
};

class DataSet{

public:
    std::unordered_map<int,Object*,HashKey> objects;

    DataSet();
    ~DataSet();

    int addObject(Object *object);
    void clear();
    int deleteObject(int id);
    int getSize();
};
编译时,我会出现以下错误:

type 'const HashKey' does not provide a call operator
        {return static_cast<const _Hash&>(*this)(__x.__cc.first);}

有没有什么方法可以使
无序的\u映射
,这样我就可以完成这个任务?作为旁注,我需要按原样使用当前的
数据集
类和当前的
对象
类。我只需要为它创建一个
std::unordered_map

您需要将哈希函数定义为一个
const
调用操作符(即
operator()
),它接受键类型的对象并返回
size\t

size_t operator()(int x) const { ... }

您需要将哈希函数定义为一个
const
调用运算符(即
运算符()
),它接受键类型的对象并返回
大小\u t

size_t operator()(int x) const { ... }
哈希必须定义
op()
Hash必须定义
op()