hash_map自定义key类型的使用

// exam1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <hash_map>
#include <cv.h>
#include <iostream>
using namespace std;

struct pt_hash
{
	static const size_t   bucket_size = 4;
	static const size_t   min_buckets = 8;
	//哈希值函数
	size_t operator()(const CvPoint2D32f &pt)const
	{
		return pt.x*2+pt.y;
	}
	//小于号比较函数
	bool operator()(const CvPoint2D32f &pt1,const CvPoint2D32f &pt2)const
	{
		if(pt1.x<pt2.x)
			return true;
		else if(pt1.x>pt2.x)
			return false;
		else
		{
			return pt1.y<pt2.y;
		}
	}
};

int main()
{
	hash_multimap<CvPoint2D32f,string,pt_hash> map;
	pair<CvPoint2D32f,string> p;
	CvPoint2D32f pt;

	pt.x=100.12;
	pt.y=200.23;
	p.first=pt;
	p.second="cjc";
	map.insert(p);

	pt.x=300;
	pt.y=400;
	p.first=pt;
	p.second="cxc";
	map.insert(p);

	pt.x=100.12;
	pt.y=200.23;
	p.first=pt;
	p.second="cxc";
	map.insert(p);

	cout<<map.size()<<endl;

	hash_multimap<CvPoint2D32f,string,pt_hash>::iterator be=map.lower_bound(pt),
		ed=map.upper_bound(pt),it;
	for(it=be;it!=ed;it++)
	{
		cout<<it->second<<endl;
	}

	system("pause");
	return 0;
}

时间: 2024-09-20 19:37:14

hash_map自定义key类型的使用的相关文章

STL中map容器使用自定义key类型报错详解

引言 STL的map容器中,key的类型是不是随意的呢? 实践 编写测试代码 定义一个结构体来试试: struct a { char* pName; int m_a; }; map<a, int> mp; a a1; a1.m_a = 100; a1.pName = "a1"; a a2; a2.m_a = 200; a2.pName = "a2"; mp.insert(std::make_pair(a1, 1)); mp.insert(std::mak

zabbix 自定义key的简单使用

zabbix版本:zabbix-3.0.2 zabbix客户端配置: zabbix的监控类型分为server和server active(不确定用哪个适合,可以都选择) 在zabbix_agentd.conf中Hostname一定要填写,而且不能和其他监控服务器重复. 自定义key之前需要先设置个参数:UnsafeUserParameters=1 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ # Include=/usr/local/et

自定义Writable类型

Hadoop的MapReduce计算模型的Key,Value值都是采用的自定义Writable类型,我们也可以自定义Writable来实现不同的业务需求. 1.定义: a.基于DataInput和DataOutput实现简单,高效,序列协议的可序列化对象: b.在hadoop的MapReduce计算编程模型中,必须实现Writable接口 c.实现通常实现静态read(DataInput)方法,该方法构造一个新的实例,调用readFields(DataInput)并返回实例. 2.接口说明 pu

c#关于Dictionary中自定义Key

Dictionary 描述 字典 Dictionary 通过 Hash 桶算法进行O(1)查找数据,在 Hash 碰撞达到一定次数后会自动进行 Resize,也会在数组大小不足的时候会自动进行Resize. 如果自定义 Key 没有重写 GetHashCode 和 Equal 方法,则会调用基类 Object 的方法. 如果自定义 Key 是 Struct 的话,则会出现装箱操作导致 GC Alloc.(旧版本的 Unity 支持 C# 不高,因此默认 Comparer 没有对 Enum 进行处

Spark用Java实现二次排序的自定义key

本人在研究Spak,最近看了很多网上的对于SPARK用Java实现二次排序的方法,对于自定义key的做法 基本上都是实现Ordered<>接口,重写$greater.$greater$eq.$less.$less$eq.compare.compareTo方法,定义hashCode.equals····· 感觉好麻烦,其实我们自定义key只是用了里面的compareTo方法,其他的$greater.$greater$eq.$less.$less$eq.compare 不用做任何改动,hashCo

zabbix专题:第九章 自定义key(案例:监控内存,监控nginx状态)

第九章 自定义key 对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.com 为什么要自定义KEY 有时候我们想让被监控端执行一个zabbix没有预定义的检测,zabbix的用户自定义参数功能提供了这个方法.我们可以在客户端配置文件zabbix_angentd.conf里面配置UserParameter. 语法如下: UserParameter=key,command 用户自定义参数包含一个key和一个命令,ke

关于自定义表类型遇到的问题~

有时候存储过程使用自定义表类型,就一个字~方便,类似于整个table直接传入到存储过程里面去玩,比起"万能"的xml~ 还不用解析,直接能用~多方便. 但是!!! 使用自定义表变量,并不一定是一帆风顺的~比如说和如果调用的参数不是有数据库这边来组装,由程序去控制传入的时候,我目前发现的就有以下2个地方十分的需要注意 1.字段顺序! 在我们看来,自定义表变量,就当时一个普通的表进行使用,赋值,写插入,直接insert select 就完事了~但是,如果写在存储过程的传入参数里面,确不一定

Zabbix 之自定义Key

1.监控进程/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "net.tcp.service[http]" 2.监控端口/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "net.tcp.port[,80]" 结果:1存在,0不存在: 3.进程数量/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k "proc.nu

zabbix自定义KEY监控服务状态[不需要端口]

zabbix监控Windows下的服务并实现告警和重启服务 首先 创建获取服务状态的脚本 一.Windows脚本 @echo off set srvname=%1 for /f "skip=3 tokens=4" %%i in ('sc query %srvname%') do set "zt=%%i" &goto :next :next if /i "%zt%"=="RUNNING" ( :服务运行正常,返回1. e