std::map容器

std::map 是有序的键值对容器,map中的元素是自动按Key(键)升序排序。
它的元素的键是唯一的。可以用比较函数 Compare 自定义排序。map的内部实现通常为红黑树。

代码:

下面分别演示std::map的 增、删、改、查、迭代器使用、auto关键字使用、以及自定义排序规则。

#include <iostream>
#include <map>

using namespace std;

//自定义比较类
class MyCompare 
{
public:
	//降低理解难度,暂时不使用函数模板
	bool operator()(const int &lnum, const int &rnum) const {
		return lnum > rnum;
	}
};

typedef map<string, string> MyMap;

typedef map<int, string, MyCompare> MyCompareMap;


//重载,暂时不使用函数模板
void printf_myMap(const MyMap &map) {
	auto mapIter = map.begin();
	for (; mapIter != map.end(); mapIter++) {
		cout << mapIter->first.c_str() << "->" << mapIter->second.c_str() << endl;
	}
}

void printf_myMap(const MyCompareMap &map) {
	auto mapIter = map.begin();
	for (; mapIter != map.end(); mapIter++) {
		cout << mapIter->first << "->" << mapIter->second.c_str() << endl;
	}
}

int main()
{
	MyMap mymap;

	//插入方法1
	mymap["1"] = "稻香";
	mymap["1"] = "青花瓷";	//青花瓷替换了稻香,没有稻香了

	//插入方法2
	mymap.insert(pair<string, string>("3", "彩虹"));
	mymap.insert(pair<string, string>("4", "夜曲"));

	//插入方法3
	mymap.insert(MyMap::value_type("6", "晴天"));
	mymap.insert(MyMap::value_type("6", "蜗牛"));	//蜗牛insert不进去了,因为已经有6了

	printf_myMap(mymap);

	cout << "----------------我是分割线----------------" << endl;
	MyMap::iterator iter;
	//查找
	iter = mymap.find("6");
	if (iter != mymap.end()) {
		cout << "find is=" << iter->second.c_str() << endl;
		//删除
		iter = mymap.erase(iter);
	}
	printf_myMap(mymap);

	cout << "----------------我是分割线----------------" << endl;
	//修改
	mymap["1"] = "七里香";
	mymap["2"] = "东方破";

	printf_myMap(mymap);


	cout << "----------------自定义排序----------------" << endl;
	//这次我们按降序 来输出 map中的元素
	MyCompareMap myCompareMap;
	myCompareMap[1] = "james";
	myCompareMap[3] = "curry";
	myCompareMap[99] = "harden";
	myCompareMap[5] = "durant";

	printf_myMap(myCompareMap);

	getchar();
	return 0;
}

以上写的三种用法,虽然都可以实现数据的插入,但是它们是有区别的,
当然pair<string, string>和MyMap::value_type效果是一样的。
但是用insert函数插入数据,在数据的插入上涉及到集合的唯一性的概念,
即当map中已经有这个关键字时,insert操作是无效的,
但是用数组方式如mymap["1"] = "稻香";就不同了,它可以覆盖以前关键字对应的值。

输出:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值