目录
1、map基本概念
1.1、简介
1.2、本质
1.3、优点
1.4、map和multimap区别
2、map构造和赋值
2.1、功能描述
2.2、函数原型
2.3、示例
3、map的大小和交换
3.1、功能描述
3.2、函数原型
3.3、示例
4、map插入和删除
4.1、功能描述
4.2、函数原型
4.3、示例
5、map查找和统计
5.1、功能描述
5.2、函数原型
5.3、示例
6、map容器排序
6.1、学习目标
6.2、主要技术点
6.3、示例
1、map基本概念
1.1、简介
- map中所有元素都是pair
- pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
- 所有元素都会根据元素的键值自动排序
1.2、本质
- map/multimap属于关联式容器,底层结构是用二叉树实现。
1.3、优点
- 可以根据key值快速找到value值
1.4、map和multimap区别
- map不允许容器中有重复key值元素
- multimap允许容器中有重复key值元素
2、map构造和赋值
2.1、功能描述
- 对map容器进行构造和赋值操作
2.2、函数原型
构造:
- map<T1, T2> mp; //map默认构造函数:
- map(const map &mp); //拷贝构造函数
赋值:
- map& operator=(const map &mp); //重载等号操作符
2.3、示例
//map的构造和赋值
void printMap(map<int,string> m) {
	map<int, string>::iterator it;
	it = m.begin();
	for (int i = 0; i < m.size();i++) {
		cout<<"key = "<<it->first<<"  value = "<<it->second<<endl;
		it++;
	}
	cout << endl;
}
void test01() {
	//1、默认构造
	map<int, string> mp;
	mp.insert(make_pair(1,"zhangsan"));
	mp.insert(make_pair(2,"lisi"));
	mp.insert(make_pair(3,"wangwu"));
	mp.insert(make_pair(4,"laoliu"));
	mp.insert(make_pair(5,"xiaoqi"));
	printMap(mp);
	//2、拷贝构造
	map<int, string> mp2(mp);
	printMap(mp2);
	//3、赋值
	map<int, string> mp3;
	mp3 = mp2;
	printMap(mp3);
}
int main() {
	test01();
	system("pause");
	return 0;
}
注意事项:map中所有元素都是成对出现,插入数据时需要使用对组pair
3、map的大小和交换
3.1、功能描述
- 统计map容器大小以及交换map容器
3.2、函数原型
- size(); //返回容器中元素的数目
- empty(); //判断容器是否为空
- swap(st); //交换两个集合容器
3.3、示例
//map的大小和互换
void printMap(map<int, string> m) {
	map<int, string>::iterator it;
	it = m.begin();
	for (int i = 0; i < m.size(); i++) {
		cout << "key = " << it->first << "  value = " << it->second << endl;
		it++;
	}
	cout << endl;
}
void test01() {
	map<int, string> mp;
	mp.insert(make_pair(1, "zhangsan"));
	mp.insert(make_pair(2, "lisi"));
	mp.insert(make_pair(3, "wangwu"));
	mp.insert(make_pair(4, "laoliu"));
	map<int, string> mp1;
	mp1.insert(make_pair(4, "哈哈哈"));
	mp1.insert(make_pair(6, "啦啦啦"));
	mp1.insert(make_pair(8, "嘿嘿嘿"));
	
	//1、判断是否为空
	if (mp.empty()) {
		cout << "map容器为空" << endl;
	}
	else {
		cout << "map容器不为空" << endl;
		//2、访问大小
		cout << "map容器的大小为:" << mp.size() << endl;
	}
	//3、交换
	cout << "交换前:" << endl;
	printMap(mp);
	printMap(mp1);
	mp.swap(mp1);
	cout << "交换后:" << endl;
	printMap(mp);
	printMap(mp1);
}
int main() {
	test01();
	system("pause");
	return 0;
}
4、map插入和删除
4.1、功能描述
- map容器进行插入数据和删除数据
4.2、函数原型
- insert(elem); //在容器中插入元素。
- clear(); //清除所有元素
- erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
- erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
- erase(key); //删除容器中值为key的元素。
4.3、示例
void printMap(map<int,char> m) {
	for (map<int, char>::iterator it = m.begin(); it != m.end();it++) {
		cout << "key=" << it->first << " value= " << it->second << endl;
	}
	cout << endl;
}
void test01() {
	int key[] = { 1,2,3,4,5 };
	char val[] = { 'a','b','c','d','e' };
	map<int, char> m;
	for (int i = 0; i < sizeof(key) / sizeof(key[0]);i++) {
		//1、插入
		m.insert(make_pair(key[i], val[i]));//1、第一种插入
	}
	printMap(m);
	
	m.insert(map<int,char>::value_type(6,'f'));//第二种插入
	
	m.insert(pair<int, char>(7, 'g'));//第三种插入
	
	m[8] = 'h';//第四种插入(不推荐使用)
	printMap(m);
	cout << m[3] << endl;//多数用于通过键,访问值
	//2、删除
	m.erase(m.begin());	//指定位置
	m.erase(7);//通过键删除
	printMap(m);
	m.erase(m.begin(),m.end());//通过区间删除(此区间为删除所有)
	printMap(m);
	//3、清空
	m.clear();
	printMap(m);
}
int main() {
	test01();
}
5、map查找和统计
5.1、功能描述
- 对map容器进行查找数据以及统计数据
5.2、函数原型
- find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回map.end();
- count(key); //统计key的元素个数
5.3、示例
//map的查找和统计
void printMap(map<int, int> m) {
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
		cout << "key=" << it->first << " value= " << it->second << endl;
	}
	cout << endl;
}
void test01() {
	map<int,int> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(2, 20));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(4, 40));
	printMap(m);
	//1、查找
	map<int, int>::iterator it = m.find(4);
	if (it!= m.end()) {
		cout << "找到了" << endl;
		cout << "key = " << it->first << " value = " << it->second << endl;
	}
	else {
		cout << "未找到" << endl;
	}
	//2、统计
	int ret = m.count(3);
	cout << "key = 3 出现:" << ret <<"次" << endl;
}
int main() {
	test01();
}
6、map容器排序
6.1、学习目标
- map容器默认排序规则为 按照key值进行 从小到大排序,掌握如何改变排序规则
6.2、主要技术点
- 利用仿函数,可以改变排序规则
6.3、示例
//map的排序
class myCompare {
public:
	bool operator()(int v1, int v2)const {
		return v1 > v2;
	}
};
void test01() {
	//1、默认升序
	map<int, int> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(3, 30));
	m.insert(make_pair(2, 20));	
	m.insert(make_pair(4, 40));
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
		cout << "key=" << it->first << " value= " << it->second << endl;
	}
	cout << endl;
	//2、重写(),改变排序规则
	map<int, int,myCompare> m1;
	m1.insert(make_pair(1, 10));
	m1.insert(make_pair(2, 20));
	m1.insert(make_pair(4, 40));
	m1.insert(make_pair(3, 30));	
	for (map<int, int, myCompare>::iterator it = m1.begin(); it != m1.end(); it++) {
		cout << "key=" << it->first << " value= " << it->second << endl;
	}
	cout << endl;
}
int main() {
	test01();
}


















