C++ 涉及到STL 中 map与multimap的基本操作 以及相应的区别 20180325day13

#include<iostream>

using namespace std;

#include"map"  //map的头文件
#include"string"  //string的头文件

//map是一个键值对序列。即(key,value)对,提供基于key的快速检索能力
//map是关联式容器 key值唯一  按照顺序插入 不可以按照位置插入
//map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。
//map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。
// multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次,multimap不支持[]操作符
// #include <map> 
//  验证是否插入成功 在今后的项目开发当中一定不要省略  注意追踪插入函数的源代码  注意他的返回值
//函数三要素 名称 参数 返回值  一定要注意返回值  然后进行一些异常处理


//map的基本操作
void main1101()
{
	//初始化  多种方法 涉及到两种数值的插入  key以及value值

	//方法一
	map<int, string> m1;
	pair<int, string> mypair(1, "teacher1");
	m1.insert(mypair);

	//方法二
	m1.insert(make_pair(2, "teacher2"));

	//方法三
	m1.insert(map<int, string>::value_type(3, "teacher3"));

	//方法四

	m1[4] = "teacher4";  //4相当于key值  后面为value值

	for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
	{
		cout << it->first << " "<<it->second<<endl;
	}

	//涉及到map元素的删除
	cout << m1.size() << endl;
	while (!m1.empty())
	{
		map<int, string>::iterator it1 = m1.begin();
		cout << it1->first << " " << it1->second << endl;

		m1.erase(it1);   //同时还可以根据元素删除,与之前容器相类似的区间删除

	}
	cout << m1.size() << endl;

}


//比较不同的插入方法的异同  初始化方法的异同
void main1102()
{

	/*总结*/
	//1 前三种方法返回的都是一个对组 pair<iterator,bool>   如果key本身存在  就会根据pair.second 来报错
	//  使用=操作符的时候                                  如果key本身存在,就会将最后一次的赋值给覆盖之前的赋值
	
	//源代码中的宏定义  typedef pair<iterator, bool> _Pairib;


	//方法一
	map<int, string> m1;

	pair<int, string> mypair(1, "teacher1");

	pair<map<int, string>::iterator, bool> mypair1 = m1.insert(mypair);  //使用mypair1来接收insert的返回值


	//验证是否插入成功 在今后的项目开发当中一定不要省略
	if (mypair1.second)
	{
		cout << mypair1.first->second << "插入成功" << endl;
	}
	else
	{
		cout << mypair1.first->second << "插入失败" << endl;
	}


	pair<map<int, string>::iterator, bool> mypair2 = m1.insert(pair<int, string>(1,"t1"));  //使用mypair2来接收insert的返回值
	
	if (mypair2.second)
	{
		cout << mypair2.first->second << "插入成功" << endl;
	}
	else
	{
		cout << mypair2.first->second << "插入失败" << endl;
	}


	//方法二
	m1.insert(make_pair(2, "teacher2"));

	//方法三
	m1.insert(map<int, string>::value_type(3, "teacher3"));

	//方法四

	m1[4] = "teacher4";  //4相当于key值  后面为value值

	for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
}


//涉及到map的查找
void main1103()
{

	
	map<int, string> m1;

	//插入
	m1.insert(make_pair(1, "teacher1"));
	m1.insert(make_pair(2, "teacher2"));
	m1.insert(make_pair(3, "teacher3"));
	m1.insert(make_pair(4, "teacher4"));
	m1.insert(make_pair(5, "teacher5"));
	m1.insert(make_pair(6, "teacher6"));

	//遍历
	for (map<int, string>::iterator it = m1.begin(); it != m1.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}

	//find查找  并且进行异常处理

	map<int, string>::iterator  myit1 = m1.find(10);

	if (myit1 == m1.end())
	{
		cout << "元素10查找失败" << endl;
	}
	else
	{
		cout << "该元素的位置在" << myit1->first << endl;
	}

	//equal_range 查找  并且进行异常处理
	pair<map<int, string>::iterator,map<int, string>::iterator>  myit2 = m1.equal_range(6);

	if (myit2.first == m1.end())
	{
		cout << "没有数大于等于6" << endl;
	}
	else
	{
		cout << myit2.first->first << endl;
	}
	if (myit2.second == m1.end())
	{
		cout << "没有数大于6" << endl;
	}
	else
	{
		cout << myit2.second->first << endl;
	}



}

int main()
{
	//main1101();//map的基本操作
	//main1102();  //比较不同的插入方法的异同  初始化方法的异同
	main1103();//涉及到map的查找
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值