C++ STL map

map/multimap容器
map中所有的元素都是pair(对组)
pair中的第一个元素为key(键),起到索引作用
,第二个元素为value(值)
所有元素都会根据元素的键值自动排序
map/multimap是关联式容器,底层结构用
二叉树实现
map和multimap区别
map不允许容器中有重复的key值元素
multimap允许容器中有重复的key值元素

函数原型
size(); //返回容器中的元素个数
empty(); //判断容器是否为空
swap(mp); //交换两个容器

insert(elem); //容器中插入操作,elem是对组
clear(); //容器清空
erase(pos); //删除指定位置元素
erase(beg,end); //删除区间元素
erase(key); //根据key进行删除

find(key); //根据key查找,存在返回对应的迭代器
不存在,则返回mp.end();
count(key); //统计key的个数,map只会返回0和1

#include <iostream>
#include <string>
#include <deque>
#include <algorithm>
#include <list>
#include <set>
#include <map>
using namespace std;

/*
	map容器中所有元素都是成对(pair)出现,插入元素时需要使用对组
*/
void printMap(const map<int, int> &mp)
{
	for (map<int, int>::const_iterator it=mp.begin(); it != mp.end(); it++)
	{
		cout<<"key:"<<(*it).first<<" "<<"value:"<<it->second<<endl;
	}
	cout<<endl;

}



//构造、拷贝函数,赋值操作
void test1()
{
	map<int, int> mp;
	
	//以pair<int, int>对组匿名对象作为插入参数
	mp.insert(pair<int, int>(1, 20));
	mp.insert(pair<int, int>(4, 30));
	mp.insert(pair<int, int>(2, 40));
	mp.insert(pair<int, int>(3, 10));
	printMap(mp);					//输出结果以key进行排序

	//map拷贝构造函数
	map<int, int> mp1(mp);
	printMap(mp1);

	//map赋值操作
	map<int, int> mp2 = mp1;
	printMap(mp2);

}

//empty、size和swap使用
void test2()
{
	map<int, int> mp;
	mp.insert(pair<int,int>(1, 20));
	mp.insert(pair<int,int>(2, 10));
	mp.insert(pair<int,int>(3, 30));
	
	if (mp.empty())
	{
		cout<<"mp容器为空"<<endl;
	}
	else
	{
		cout<<"mp容器不为空"<<endl;
		cout<<"size:"<<mp.size()<<endl;
	}

	map<int, int> mp1;
	mp1.insert(pair<int,int>(4, 20));
	mp1.insert(pair<int,int>(5, 10));
	mp1.insert(pair<int,int>(6, 30));

	mp.swap(mp1);
	printMap(mp);
	printMap(mp1);
}

void test3()
{
	map<int, int> mp;
	//第一种
	mp.insert(pair<int, int>(1, 20));
	
	//第二种
	mp.insert(make_pair(2, 30));

	//第三种
	mp.insert(map<int, int>::value_type(3, 40));

	//第四中,不建议做插入操作,即使键不存在,会返回value默认值0
	//一般用于根据key来获取对应的value值
	mp[4] = 50;

	printMap(mp);
	
	cout<<mp[5]<<endl;//即使键为5的不存在,也会返回值,不会报错

	//根据迭代器位置进行删除
	mp.erase(mp.begin());
	printMap(mp);

	//根据key进行删除
	mp.erase(4);
	printMap(mp);

	//根据区间进行删除
	mp.erase(mp.begin(), mp.end());
	printMap(mp);
}

void test4()
{
	map<int, int> mp;
	mp.insert(pair<int, int>(1, 10));
	mp.insert(pair<int, int>(2, 20));
	mp.insert(pair<int, int>(3, 30));
	map<int, int>::iterator pos = mp.find(3);
	if (pos != mp.end())
	{
		cout<<"find:"<< pos->first <<" "<<pos->second<<endl;
	}
	else
	{
		cout<<"not find"<<endl;
	}

	//count统计,结果只会0或1, map不允许插入相同的key元素,multimap可以插入重复的key
	cout<<"count:"<<mp.count(3);
}

//自定义排序
class MyCompare
{
public:
	bool operator()(int v1, int v2)
	{
		return v1>v2;
	}
};
void test5()
{
	map<int, int, MyCompare> mp;
	mp.insert(pair<int, int>(1, 10));
	mp.insert(pair<int, int>(2, 20));
	mp.insert(pair<int, int>(3, 30));

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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值