C++-STL(8)-unordered_map-自定义类型(1)-key-自定义对象-实例源码

本篇 自定义对象:Rect里的成员变量都是基础数据类型。
下篇  C++-STL(9)-unordered_map-自定义类型(2)-实例源码 成员变量是自定义对象
基础数据类型、自定义对象类型相比:
  1.定义:unordered_map<Rect, Rect_hash,int> rectmap;
                unordered_map<string,int> imap;
   2.访问:
              unordered_map<Rect, Rect_hash,int>::iterator iter;   iter->first.name
              unordered_map<string,int>::iterator iter;                        iter->first

以下是unordered_map 自定义类型增删改查代码实例:
1.class Rect{};

class Rect {
public:
	int width;
	int height;
	string name;


	Rect(int a, int b, string str)
	{
		width = a;
		height = b;
		name = str;
	}
	bool operator==(const Rect& rc) const
	{
		return name == rc.name && width == rc.width && height==rc.height;
	}

};


2.class Rect_hash{};
 

class Rect_hash
{
public:
	size_t operator()(const Rect& rc)const
	{
		return hash<string>()(rc.name) ^ hash<int>()(rc.width) ^ hash<int>()(rc.height);
	}
	
};


3.hashmap_rect()调用

void hashmap_rect()
{
	cout << "hashmap_rect*******************" << endl;
	//1.定义 unordered_map < Rect,int,Rect_hash> rectmap;
	//2.插入insert pair<,> make_pair(Rect(0, 300, "a"), 300));
	//3.得到大小 int nSize = rectmap.size();
	//4.查找 iter=rectmap.find()   输入key 返回iter
	//5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功
	//6.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());
	//7.修改rectmap['d']=4000;
	
	cout << "1定义 unordered_map<Rect, Rect_hash,int> rectmap;" << endl;
	cout << " 2插入insert pair<,>" << endl;
	unordered_map <Rect, int,Rect_hash> rectmap;
	rectmap.insert(make_pair(Rect(0, 300, "a"), 300));
	rectmap.insert(pair<Rect, int>(Rect(1, 200, "z"), 200));
	rectmap.insert(pair<Rect, int>(Rect(2, 300, "b"), 300));
	rectmap.insert(pair<Rect, int>(Rect(3, 7, "d"), 7));
	rectmap.insert(pair<Rect, int>(Rect(4, 500, "f"), 500));
	for (auto iter = rectmap.begin(); iter != rectmap.end(); ++iter)
	{
		cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
	}
	cout << " 3得到大小 int nSize = rectmap.size();" << endl;
	int nSize = rectmap.size();
	cout << nSize << endl;
	cout << "4.查找 iter=rectmap.find(b)  输入key 返回iter Rect rect1 = Rect(2, 300, 'b'); " << endl;
	unordered_map<Rect, int, Rect_hash>::iterator iter;
	Rect rect1 = Rect(2, 300, "b");
	iter = rectmap.find(rect1);
	cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;

	cout << "5.删除 int n=rectmap.erase(key) 返1 成功;返0 不成功  iter Rect rect2 = Rect(1, 200, 'z')" << endl;
	Rect rect2 = Rect(1, 200, "z");
	int n = rectmap.erase(rect2);
	cout << "删除后的返回值=" << n << endl;
	for (iter = rectmap.begin(); iter != rectmap.end(); iter++)
	{
		cout << "first.name=" << iter->first.name << "first.width=" << iter->first.width << "first.heigh=" << iter->first.height << endl;
	}
	cout << "6.修改rectmap[rect1]=4000;  rect1 = Rect(2, 300, 'b')" << endl;
	rectmap[rect1] = 4000;
	cout << rectmap[rect1] << endl;

	cout << "7.删除全部 rectmap.erase(rectmap.begin(), rectmap.end());" << endl;
	rectmap.erase(rectmap.begin(), rectmap.end());
	nSize = rectmap.size();
	cout << "删除全部后map的长度" << nSize << endl;
		
}



      
   
      

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值