STL: unordered_map 自定义键值使用

使用Windows下 RECT 类型做unordered_map 键值

1. Hash 函数

计算自定义类型的hash值。

struct hash_RECT
{
	size_t operator()(const RECT &rc) const
	{
		return std::_Hash_seq((const unsigned char *)&rc, sizeof(RECT));
	}
};

  

2. 相等函数

哈希需要处理碰撞,意味着必须判断两个自定义类型对象是否相等。

struct cmp_RECT
{
	bool operator()(const RECT &rc1, const RECT &rc2) const
	{
		return rc1.left == rc2.left && rc1.top == rc2.top
			&& rc1.right == rc2.right && rc1.bottom == rc2.bottom;
	}
};

  

3. 使用

std::unordered_map<RECT, std::wstring, hash_RECT, cmp_RECT> G_mapText
时间: 2024-10-11 21:57:16

STL: unordered_map 自定义键值使用的相关文章

std::map使用结构体自定义键值

使用STL中的map时候,有时候需要使用结构题自定义键值,比如想统计点的坐标出现的次数 struct Node{ int x,y; }; ...... map<Node,int>mp; mp[(Node){x,y}]++; 这样子的话,会出现一堆报错 c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stl_function.h||In instantiation of 'bool std::less<_Tp>::operator()(

监控服务器Zabbix之二 自定义键值及模板

一.添加主机 打开zabbix的web界面 http://192.168.212.2/zabbix 1.Configuration---Hosts---Createhost Host name:这个应该是agent 配置文件定义的Hostname,我们这是192.168.3.3. Visible name:这个就是显示名称,自定义即可. Group:将主机归类到哪个组中. 以下根据你选的监控方式来定义下面参数. Agent interfaces:就是主机上安装的agent,默认即可不用修改. S

zabbix自定义键值原理

子配置文件的配置 为了便于维护和分类管理,UserParameter的内容可以单独写一个配置文件 # vim /usr/local/zabbix/etc/zabbix_agentd.conf Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ Include也就是zabbix_agent.conf中部分内容的子配置文件

【map】【unordered_map】map和unordered_map中键类型为自定义类型的操作

STL中map的底层为红黑树,所以查找的时间复杂度为O(logn). unordered_map是根据哈希值(遇到哈希值相同时用==号比较)寻找键,所以时间复杂度为O(1). 键类型为自定义类型时,map需要重载键类型的<符号,unordered_map需要定义键类型的哈希函数(在类外定义),以及重载键类型的==符号. class person1 { public: string name; int age; person1(string s,int i):name(s),age(i){} //

Map以自定义类做为键值

map在STL中的定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> 第一个参数Key是关键字类型 第二个参数T是值类型 第三个参数Compare是比较函数(仿函数) 第四个参数是内存配置对象 map内部存储机制实际是以红黑树为基础,红黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作.所以作为关键字,起码必须有"<"这个比较操作

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: template < class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键:第二个就是值:第四个就是空间配置器,默认使用alloc(随STL版本不同而不同).那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树).RB-tree树在进行插

IOS自定义NSDictionary键值类

使用OC自定义了一个IntPair类作为NSDictionary类的键值,与JAVA中的Pair<int,int>使用方式类似,然而在使用过程中遇到了各种问题,有必要记录一下. 首先,需要实现NSCoping协议,如果不实现的话,在使用IntPair作为key向dictionary中添加数据时会报警告:Sending 'IntPair *__strong to parameter of incompatible type 'id<NSCopying> _Nonnull' 一开始没管

[VisualStudio]_[增加自定义宏,自定义属性键值]

场景: 1. vs C++的"预处理器"里可以添加宏,但是添加之后外部程序修改并不容易,因为它添加到.vcxproj文件里了,这个文件的东西比较多,并不容易进行修改. 2.所以vs还有一个"属性管理器"的窗口,用它来自定义自己的宏,注意,这里不是指宏命令. 步骤: 1.打开属性管理窗口,菜单 视图->其他窗口->属性管理器 点击 "属性管理器" 的 "添加新项目属性表",我这里起了名字prop. 2. 双击prop

是数据库设置主键自增的时候添加也可以自定义主键值

SET IDENTITY_INSERT  dbo.PDAUserInfo ON //开启当前表的可复制功能,仅在当前绘画中有效 insert into dbo.PDAUserInfo(ID,UserName) values(43,'asdf') SET IDENTITY_INSERT  dbo.PDAUserInfo OFF    //关闭当前表的可复制功能,仅在当前绘画中有效 insert into dbo.PDAUserInfo(UserName) values('asdf') 是数据库设置