自定义数据类型作为map/multimap的键值

在使用map或者multimap时,有时候我们需要自定义键值,才能符合程序的需要。比如12306查询系统,得先把出发点和目的地都作为查询点才可以,可以写一个类,然后map的键值就是这个类,实值是下标。当然有些麻烦,直接用pair也未尝不可。
原因:map的键值是自动比较后进插入的,键值是递增的,而现在我们自定义的键值,编译器无法进行比较,找不到类似的模板,所以报错。
既然是没有‘<’,那我们自己重载小于操作符应该就可以,下面的代码就是解决方法

#include //代码来自GreenArrowMan
#include 
 
struct  Test
{
	int x;
	int y;
 
	bool operator < (const Test &o) const
	{
		return x < o.x || y < o.y;
	}
};
 
int main()
{
	std::map mapTest;
	Test test = { 1, 2 };
	mapTest[test] = "Test1";
	
	for (auto it = mapTest.begin(); it != mapTest.end();it++)
	{
		std::cout << it->first.x << " " << it->first.y << " " << it->second.c_str() << std::endl;
	}
 
	return 0;
}

你可能感兴趣的:(c++学习笔记)