我想将unordered map
与一个自定义的Key
类一起使用:
#include <iostream>
#include <unordered_map>
using namespace std;
class Item
{
private:
std::string m_ItemId;
int m_Price;
int m_Count;
public:
Item(std::string id, int price, int count): m_ItemId(id), m_Count(count), m_Price(price){}
int getCount() const { return m_Count;}
std::string getItemId() const { return m_ItemId;}
int getPrice() const { return m_Price;}
};
class Key
{
int m_value;
public:
Key(int val) :m_value(val){}
int getValue() const {return m_value;}
};
struct Compare
{
size_t operator()(const Key& a, const Key& b) const
{
return a.getValue() < b.getValue();
}
};
unordered_map<Key, Item, Compare> getItemList()
{
unordered_map<Key, Item,Compare> mapOfItems ;
mapOfItems.insert(std::make_pair(Key(1), Item("D121",100,2)));
mapOfItems.insert(std::make_pair(Key(8), Item("D122",12,5)));
mapOfItems.insert(std::make_pair(Key(6), Item("D125",99,3)));
mapOfItems.insert(std::make_pair(Key(3), Item("D123",28,6)));
mapOfItems.insert(std::make_pair(Key(2), Item("D125",99,3)));
return mapOfItems;
}
int main()
{
unordered_map<Key, Item, Compare> mp = getItemList();
return 0;
}
我有一个编译错误:
错误:静态Assert失败:散列函数必须可使用键类型的参数调用
你能帮帮我吗?
1条答案
按热度按时间2ul0zpep1#
需要理解的是,
std::unordered_map
是标准库所称的哈希表。它是一个“无序”容器,因为它不是基于比较的关联容器,例如std::map
的典型实现是红黑树。它的第三个模板参数是一个哈希函数对象,而不是一个比较函数。(它的第四个模板参数 * 是 * 一个类似比较的函数对象,一个相等性检查函数,因为哈希表实现需要测试相等性以解决哈希冲突等。)如下: