C++---map/multimap用法介绍

map

C++ STL中封装的一种关联式容器,里面存储的是键值对类型,在数据查询中效率较高。

什么是键值对
键值对是一种一一对应的关系,结构,第一个为关键字,第二个为关键字的值,例如:在词典中我们可以通过汉语,查具体的英文单词,查单词的操作就是一一对应的关系,<苹果,Apple>,苹果就相当于key,Apple就相当于value。

键值对的创建方法:pair (key,value)

注意:一一对应,则表示key值唯一,由于map底层封装了搜索二叉树,所以对其进行遍历可得到有序数列

map的接口

构造
在这里插入图片描述
由于比较方式与配置器不需要给出,所以我们构造函数写起来就相对简单一点。

构造函数 接口
map m1 T1为key的类型,T2为value的类型,其值可以不同
map m2(m1) 拷贝构造
map m3 = m2 赋值构造

在这里插入图片描述
注意:map的拷贝构造与赋值构造是浅拷贝

迭代器

接口 接口说明
begin 返回第一个元素的位置
end 返回最后一个元素的下一个位置
rbegin 反向迭代器,返回最后一个元素的下一个位置
rend 反向迭代器,返回第一个元素的位置

容量操作

接口 接口说明
max_size 最大容量,类似于capacity
empty 判空操作
size 有效元素的个数

注意:容量操作都是返回key值的个数

元素修改操作

接口 接口说明
insert(kay,value) 插入操作
insert(it,key,value) 在it的位置插入键值对
insert [begin,end) 区间构造
erase(const key& x) 删除操作,删除key等于x的元素
swap 交换两个map中的元素
clear 清空map中元素
find(const key& x) 查找key为x的元素,找到返回位置迭代器,未找到返回end迭代器
count(const key& x) 返回key为x元素的个数,0或1,主要是用于检测map中是否有key
operator[ ] 随机访问方式的重载,如果元素存在,则返回下标,不存在,则插入元素
at 元素访问操作,如果元素不存在,返回异常
int main()
{
	std::map<char, int> mymap; //构造

	// 使用insert插入元素,pair(key,value)创建键值对
	mymap.insert(std::pair<char, int>('a', 100));
	mymap.insert(std::pair<char, int>('z', 200));

	std::pair<std::map<char, int>::iterator, bool> ret;
	ret = mymap.insert(std::pair<char, int>('z', 500));
	if (ret.second == false) {
		std::cout << "element 'z' already existed";
		std::cout << " with a value of " << ret.first->second << '\n';
	}

	// 在it的位置插入键值对
	std::map<char, int>::iterator it = mymap.begin();
	mymap.insert(it, std::pair<char, int>('b', 300));  // max efficiency inserting
	mymap.insert(it, std::pair<char, int>('c', 400));  // no max efficiency inserting

	// 区间构造,同时使用find查找
	std::map<char, int> anothermap;
	anothermap.insert(mymap.begin(), mymap.find('c'));

	// 使用迭代器打印
	std::cout << "mymap contains:\n";
	for (it = mymap.begin(); it != mymap.end(); ++it)
		std::cout << it->first << " => " << it->second << '\n';

	std::cout << "anothermap contains:\n";
	for (it = anothermap.begin(); it != anothermap.end(); ++it)
		std::cout << it->first << " => " << it->second << '\n';


	//将mymap与anothermap进行交换
	mymap.swap(anothermap);

	//反向迭代器的使用
	std::cout << "mymap contains:\n";
	std::map<char, int>::reverse_iterator rit;
	for (rit = mymap.rbegin(); rit != mymap.rend(); ++rit)
		std::cout << it->first << " => " << it->second << '\n';

	std::cout << mymap.count('a') << std::endl;
	std::cout << mymap.size() << std::endl;
	std::cout << mymap.max_size() ;

	//删除key == a的元素
	mymap.erase('a');
	
	system("pause");
	return 0;
}

multimap

multip和map的唯一区别就是:map中的key唯一(不能重复)。multimap中的key是可以重复的

特征:
  1. mutilmap的key是可以重复的。
  2. multimap元素是按照小于进行排列。

基本的接口与map相类似,头文件和map头文件相同。

你可能感兴趣的:(C++---map/multimap用法介绍)