c++ unordered_map 自定义key
2020-12-13 14:42
标签:zha ring 默认 exce 路径 测试环境 multiset pre 类型 C++11新增了一类散列容器包括unordered_set, unordered_map, unordered_multiset, unordered_multimap, 即之前熟悉的hash_set, hash_map等。 这类容器底层以哈希表实现之,通过unordered_map介绍下这类容器的使用。 unordered_map 是一个模板类,需要我们提供5个魔板参数。依次为:key值的类型, value值的类型,hash函数, 等价函数, 容器分配器。其中后三个有默认参数,那我们是不是只需要提供前2个模板参数就可以使用了呢? 不一定。当我们使用的key为内置类型时(如int, double, float, string等),后面三个默认模板参数在STL内有其特化版本,故可以直接进行使用。可一旦你的类为自定义类型, 其中的hash和equal就得由你自己提供。其实也不难理解, 假设你的对象是一块石头,石头怎么进行hash, 石头怎么怎么比大小呢?编译器当然不知道,这就需要你告诉编译器。下面我们对这2种情况分别举例说明。 (一)、当key为内置类型: (二)、当key为自定义类型: 比如我们简单定义一个package类,里面仅有名字,电话2项数据。 然后将原生hash包装使用下: 或者可以借助借助boost库的hash_value: 当我们把Hash函数(package的特化版本)和 等价函数 (操作符==重载)提供后, 便可使用自定义版本的unordered_map了: 下面给出测试代码: (测试环境: VS2017) 本文转自:https://www.cnblogs.com/xiguas/p/9977933.html c++ unordered_map 自定义key 标签:zha ring 默认 exce 路径 测试环境 multiset pre 类型 原文地址:https://www.cnblogs.com/Malphite/p/11568661.htmlunordered_map
当key为内置类型, 仅需提供key与value的类型便可运用。 其中hashclass package
{
public:
string getName() const { return name; }
long long getPhone() const { return phone; }
package(string m_name = 0, long long m_pNum = 0);
bool operator== (const package& p) const
{ return name == p.name &&
phone == p.phone;
}
private:
string name;
long long phone;
};
namespace std
{
template
struct hash
namespace std
{
template
struct hash
unordered_map
#include
下一篇:前端网站收藏