STL容器 关于map的用法的记录-持续更新

STLmap的格式这这样的。map<key,value> a;

其中key是键的意思,value是值。俗称键值对。

STL中map有两种方式,第一种就是map,这种方式的键不可以是相同的。第二种方法是multimap,这种map是允许键相同的。

上代码查看实际效果:

#include <iostream>
#include <map>
#include <string>

using namespace std;
int main()
{
	map<int, string> a;
	map<string, int> 分数;
	multimap<int, string> ma;
	//因为map是一对一对的,要先把一组数据整合成一对然后插入map中
	//使用value_type
	//添加
	a.insert(map<int,string>::value_type(1,"one"));//第一种插入方法
	a.insert(map<int,string>::value_type(2,"two"));
	a.insert(map<int,string>::value_type(3,"three"));
	
	a.insert(make_pair(-1,"Minus one"));			//第二种插入方法

	a.insert(pair<int,string>(1000,"One Thousand"));//第三种方法

	a[1000000] = "One Million";				//第四种方法

	cout << "map里面一共有" << a.size() << "个key-value对数据" << endl;
	
	分数.insert(make_pair("张飞",99));
	分数.insert(make_pair("刘备",56));
	分数["关羽"] = 87;

	//使用迭代器把数据显示出来
	cout << "这些数据是:" << endl;
	map<int, string>::const_iterator i;
	for (i = a.begin(); i != a.end(); ++i)
	{
		cout << "key :" << i->first << " ";
		cout << "Value :" << i->second.c_str()<< " ";//使用C语言方式显示出来
		cout << "Value :" << i->second<< " ";//使用C++方式显示出来
		cout << endl;
	}

	ma.insert(multimap<int,string>::value_type(3,"three"));
	ma.insert(multimap<int,string>::value_type(45,"forth five"));
	ma.insert(make_pair(-1,"minus one"));
	ma.insert(pair<int,string>(1000,"one throusand"));
	ma.insert(pair<int,string>(1000,"one throusand"));

	cout << endl << "multimap里面有" << ma.size() << "个数据" << endl;
	
	multimap<int, string>::const_iterator im;
	for (im = ma.begin(); im != ma.end(); ++im)
	{
		cout << "key:" << im->first;
		cout << "value:" << im->second;
		cout << endl;
  	}
	//使用count可以查看里面有几个1000
	cout << "multimap里面" << ma.count(1000) << "个1000" << endl;

	///
	//查找
	//最简单的查找,通过键查找value
	cout << "最简单的查找" << endl;
	cout << a[3] << endl << endl;
	cout << 分数["刘备"] << endl << endl;

	multimap<int, string>::const_iterator fi;
	fi = ma.find(45);
	if (fi != ma.end())
	{
	
		cout << "找到了:" << fi->first << " = " << fi->second << " ";
	}
	else
	{
		cout << "没找到" << endl;
	}

	fi = ma.find(1000);
	if (fi != ma.end())
	{
		cout << "找到了1000" << endl;
		size_t n = ma.count(1000);
		for (size_t i = 0; i < n; ++i)
		{
			cout << "\t Key: " << fi->first;
			cout << ", Value[" << i << "] = ";
			cout << fi->second << endl;
			++fi;
		}		
	}
	else
	{
		cout << "没找到" << endl;
	}
	

	删除
	//第一种方法
	if (ma.erase(-1) > 0)//如果删除成功返回值大于0
	{
		cout << "删除-1成功" << endl;
	}
	//使用非常量迭代器
	//第二种方法
	multimap<int, string>::iterator ir = ma.find(45);
	if (ir != ma.end())
	{
		ma.erase(ir);
		cout << "删除45成功!" << endl;
	}
	//第三种方法
	//             最前的1000        最后的1000//这两者之间的1000都删除了
	ma.erase(ma.lower_bound(1000),ma.upper_bound(1000));



	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值