#include <iostream>
#include <map>
using namespace std;

#define N 5

typedef struct pointer {
	int x;
	int y;
	//map对插入元素自动排序,使用时必须重写结构体的<操作函数
	bool operator<(pointer const& p) const {
		if (x < p.x) {
			return true;
		} else if (x > p.x) {
			return false;
		}
		return y < p.y;
	}
} Pointer;

void init(Pointer* pointers, int len, map<Pointer, int>& pointMap) {
	for (int i = 0; i < len; ++i) {
		pointMap.insert(pair<Pointer, int>(pointers[i], i));
	}
}

void readAll(Pointer* pointers, int len, map<Pointer, int> pointMap) {
	for (int i = 0; i < len; ++i) {
		//用结构体查找,注意查找语法
		map<Pointer, int>::iterator pointer = pointMap.find(pointers[i]);
		if (pointer != pointMap.end()) {
			cout << "( " << pointer->first.x << " , " << pointer->first.y
					<< " )" << " index: " << pointer->second << endl;
		}
	}
}
bool findPointer(map<Pointer, int> pointMap, int len, Pointer pointer,
		Pointer &result) {
	map<Pointer, int>::iterator iter = pointMap.find(pointer);
	if (iter != pointMap.end()) {
		cout << "( " << iter->first.x << " , " << iter->first.y << " )"
				<< " index: " << iter->second << endl;
		result = iter->first;
		return true;
	}
	return false;
}

int main() {
	Pointer pointers[] = { { 1, 2 }, { 2, 4 }, { 4, 4 }, { 1, 5 }, { 2, 7 }, {
			9, 9 }, { 3, 5 }, { 3, 4 } };

	map<Pointer, int> pointMap;
	int len = sizeof(pointers) / sizeof(Pointer);

	init(pointers, len, pointMap);
	readAll(pointers, len, pointMap);

	Pointer result;
	if (findPointer(pointMap, len, pointers[2], result)) {
		cout << "result: " << "( " << result.x << " , " << result.y << " )"
				<< endl;
	}
	return 0;
}

一个数组保存了N个结构,每个结构保存了一个坐标,结构间的坐标都不相同,请问如何找到指定坐标的结构(除了遍历整个数组,是否有更好的办法)?的更多相关文章

  1. SQL Server 修改表结构后无法保存的老问题

    在修改表结构后无法保存,这是每次重装SQL Server后都会遇到的问题,好记性不如烂笔头,在这里记一下吧. 保存修改了的表结构时会提示“不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法 ...

  2. php foreach 语法的遍历来源数组如果不是一个有效数组php会出现错误警告 Invalid argument supplied for foreach()

    在php中,foreach语法的遍历来源数组如果不是一个有效数组,php会出现错误警告 Invalid argument supplied for foreach() ,但是很多时候这个数组是取自某些 ...

  3. matlab结构体形式保存数据生成.mat文件< 转>

    2015年 参加天池大数据竞赛     为了建立模型,打算基于matlab使用Random Forest Algorithm的工具包 该工具包我在此分享给大家,http://yunpan.cn/cVX ...

  4. 将String类型的二维数组中的元素用FileOutputStream的write方法生成一个文件

      将String类型的二维数组中的元素用FileOutputStream的write方法生成一个文件import java.io.File;import java.io.FileOutputStre ...

  5. php递归实现一维数组转为指定树状结构 --- 省市区处理

    ### 这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来 ### 原数据: // { // 广东省: { // 广州市: [ // &quo ...

  6. Vuex form表单处理, 比官网更好的办法

    Vuex form表单处理, 比官网更好的办法 问题, 当使用vuex的state作为表单的v-model元素, 虽然简单粗暴, 但这种修改没有经过mutation方法. 在严格模式下会抛出错误 目录 ...

  7. sql 从一个库中取某个表的数据导入到另一个库中相同结构的表中

    sql 2008 从一个库中把 某个表中的数据导入到另一个库中的具有相同结构的表中 use 库1 go insert into  库1.dbo.表1  select * from  库2.dbo.表1 ...

  8. Tomcat目录结构及Tomcat Server处理一个http请求的过程

    http://blog.sina.com.cn/s/blog_62cb15980101jh9x.html 1.Tomcat的结构概述     Tomcat服务器是由一系列可配置的组件构成,其核心组件是 ...

  9. #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个key的值

    #!/usr/bin/env python #有如下值集合[11,22,33,44,55,66,77,88,99,90...],将所有大于66值保存至字典的一个key中,将小于66的值保存至大二个ke ...

随机推荐

  1. promise 的基本概念 和如何解决js中的异步编程问题 对 promis 的 then all ctch 的分析 和 await async 的理解

    * promise承诺 * 解决js中异步编程的问题 * * 异步-同步 * 阻塞-无阻塞 * * 同步和异步的区别? 异步;同步 指的是被请求者 解析:被请求者(该事情的处理者)在处理完事情的时候的 ...

  2. .NET CORE 2.0之 httpcontext

    HttpContext  在之前的.NET framework 是一个非常常用且强大的类,在.NET CORE2.0中要像以前用是不太方便的了, 要是用sesson 首先需要在startup 的Con ...

  3. PHPCMS某处设计缺陷可致authkey泄露

    在分析几个phpcms的漏洞就换分析其他的,换换口味. 漏洞来源:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0106892.html swfup ...

  4. SpringMVC 教程 - Controller

    原文地址:https://www.codemore.top/cates/Backend/post/2018-04-10/spring-mvc-controller 声明Controller Contr ...

  5. [测试题]gene

    Description Input Output Sample Input 3A+00A+A+ 00B+D+A- B-C+00C+ Sample Output bounded Hint 题解 //It ...

  6. 李耀于NOIP2010集训出的题 Dvalue

    此题模型比较明显,求无向图的一棵生成树,使得最大边减去最小边的值最小,这是最小生成树的一个变式 设计出此题的算法需要利用Kruskal贪心的性质,首先枚举一条最小边,接着求原图的一棵最小生成树,根据k ...

  7. ●BZOJ 2049 [Sdoi2008]Cave洞穴勘测

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题解: LCT入门题 就是判两个点是否在同一颗树里 代码: #include<c ...

  8. 【USACO12JAN】视频游戏的连击Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...

  9. Amazon新一代云端关系数据库Aurora(上)

    本文由  网易云发布. 在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazon首次系统的总结 了新一代云端关系数据库Aurora的设计实现 ...

  10. 分区工具PQ

    http://www.disktool.cn/jiaocheng/resize-partition.html