STL map和multimap型容器常用的成员

/**********************************************************************************/
/* 关联容器不提供front、push_front、pop_front、back、push_back以及pop_back操作    */
/* 关联容器不能通过容器大小来定义,因为这样子的话就无法知道键所对应的值是什么     */
/* 关联容器支持begin、end、rbegin和rend操作                                       */
/* 关联容器支持swap操作,但不提供assign操作                                       */
/* 关联容器支持clear和erase操作                                                   */
/* 关联容器支持size、max_size、empty操作,但不支持resize操作                      */
/* 关联容器的value_type并非元素类型,而是描述键及其关联值类型的pair类型           */
/* map的value_type是pair类型,它的值成员可以修改,但键成员不能修改                */
/* map迭代器进行解引用将产生pair类型的对象                                        */
/* map元素的存取需要经过迭代器实现                                                */
/**********************************************************************************/

/**********************************************************************************/
/* map的构造函数                                                                  */
/* map<k, v> m;  创建一个空map对象                                                */
/* map<k, v> m(m2); 创建map对象m2的副本m,m与m2必须有相同的键类型和值类型         */
/* map(k, v) m(b, e); 创建map对象m,存储迭代器b和e标记的范围内的所有元素副本      */
/**********************************************************************************/

/**********************************************************************************/
//pair类型                                                                        //
//pair<T1, T2> P1;创建一个空的pair对象,它的两个元素分别是T1,T2类型,值初始化    //
//pair<T1, T2> P1(V1, V2);创建一个pair对象,它的两个元素分别是T1,T2类型其中first //
//成员初始化为V1,second成员初始化为V2                                            //
//make_pair(V1, V2)以V1、V2值创建一个新的pair对象,其元素类型分别是V1、V2的类型   //
/**********************************************************************************/

#pragma warning(disable:4786)

#include <iostream>
#include <utility>
#include <map>

using namespace std;

typedef pair<int, double> CustomPair;

void Origin(map<int, double, greater<int>> &m, multimap<int, double, greater<int>> &mm)
{
	m.insert(CustomPair(1, 5.0));
	m.insert(CustomPair(2, 7.0));
	m.insert(CustomPair(3, 7.0));
	m.insert(CustomPair(4, 17.0));
	m.insert(CustomPair(5, 11.0));
	mm.insert(CustomPair(1, 4.0));
	mm.insert(CustomPair(2, 8.0));
	mm.insert(CustomPair(3, 9.0));
	mm.insert(CustomPair(4, 12.0));
	mm.insert(CustomPair(5, 19.0));
}

void Print(map<int, double, greater<int>> &m, multimap<int, double, greater<int>> &mm)
{
	map<int, double, greater<int>>::iterator it;
	multimap<int, double, greater<int>>::iterator itM;
	int size = m.size();
	cout << "map: " << endl;
	for (it = m.begin(); it != m.end(); it++)
	{
		CustomPair tmp = *it;
		cout << tmp.first << ", " << tmp.second << endl;
	}

	int Msize = mm.size();
	for (itM = mm.begin(); itM != mm.end(); itM++)
	{
		CustomPair tmp = *itM;
		cout << tmp.first << ", " << tmp.second << endl;
	}

}

int main()
{
	typedef pair<string, string> Author;
	Author proust("Marcel", "Proust");
	Author joyce("James", "Joyce");

	Author makepair = make_pair("Lucy", "English");
	Author def;

	//pair对象的操作
	string first = makepair.first;
	string second = makepair.second;

	map<int, double>::iterator itm;
	map<int, double, greater<int>>::iterator itmG;
	map<int, double, less<int>>::iterator itmL;

	map<int, double> m1;
	map<int, double, greater<int>> m2;
	map<int, double, less<int>> m3;
	multimap<int, double> m4;
	multimap<int, double, greater<int>> m5;

	//以less<>为排序准则
	m1.insert(CustomPair(1, 2.0));
	m1.insert(CustomPair(2, 5.0));
	m1.insert(CustomPair(3, 7.0));
	m1.insert(CustomPair(4, 8.0));
	m1.insert(CustomPair(5, 11.0));
	m1.insert(CustomPair(6, 6.0));

	//以greater<>为排序准则
	m2.insert(CustomPair(1, 2.0));
	m2.insert(CustomPair(2, 5.0));
	m2.insert(CustomPair(3, 7.0));
	m2.insert(CustomPair(4, 8.0));
	m2.insert(CustomPair(5, 11.0));
	m2.insert(CustomPair(6, 6.0));

	//以less<>为排序准则
	m3.insert(CustomPair(1, 2.0));
	m3.insert(CustomPair(2, 5.0));
	m3.insert(CustomPair(3, 7.0));
	m3.insert(CustomPair(4, 8.0));
	m3.insert(CustomPair(5, 11.0));
	m3.insert(CustomPair(6, 6.0));

	//以less<>为排序准则
	m4.insert(CustomPair(1, 2.0));
	m4.insert(CustomPair(2, 5.0));
	m4.insert(CustomPair(3, 7.0));
	m4.insert(CustomPair(4, 8.0));
	m4.insert(CustomPair(5, 11.0));
	m4.insert(CustomPair(6, 6.0));

	//以greater<>为排序准则
	m5.insert(CustomPair(1, 2.0));
	m5.insert(CustomPair(2, 5.0));
	m5.insert(CustomPair(3, 7.0));
	m5.insert(CustomPair(4, 8.0));
	m5.insert(CustomPair(5, 11.0));
	m5.insert(CustomPair(6, 6.0));

	map<int, double>::allocator_type ma;//内存配置器类型
	ma = m2.get_allocator();//获取m2的内存配置器类型
	map<int, double> m6(less<int>(), ma);
	m6.insert(CustomPair(16, 1.0));
	m6.insert(CustomPair(15, 7.0));
	m6.insert(CustomPair(24, 9.0));
	m6.insert(CustomPair(23, 13.0));
	m6.insert(CustomPair(32, 21.0));
	m6.insert(CustomPair(11, 27.0));

	map<int, double> m7(greater<int>());
	map<int, double> m7(less<int>());

	//map的容量
	int size = m1.size();
	int max_size = m1.max_size();

	//遍历容器
	map<int, double, greater<int>> m_one;
	multimap<int, double, greater<int>> m_two;

	map<int, double, greater<int>>::iterator itI;
	map<int, double, greater<int>>::reverse_iterator itR;
	multimap<int, double, greater<int>>::iterator itIM;
	multimap<int, double, greater<int>>::reverse_iterator itRM;

	Origin(m_one, m_two);
	Print(m_one, m_two);

	/************************************************************************/
	/*map/multimap的插入与删除                                              */
	/*insert(const value_type& x)将元素插入到map对象末端                    */
	/*insert(it, const value_type& x)将元素x插入到迭代器it之前              */
	/*insert(const value_type* first, const value_type* last)将迭代器范围   */
	/*内的元素插入到map对象中                                               */
	/*erase(it)删除it指向的元素                                             */
	/*erase(first, last)删除迭代器范围内的元素                              */
	/*erase(const key& key)删除元素key                                      */
	/************************************************************************/
	map<int, double, greater<int>> map1;;
	map<int, double, greater<int>> map2;
	multimap<int, double, greater<int>> mmap1;
	multimap<int, double, greater<int>>::iterator itmA, itmB;
	map1.insert(CustomPair(1, 5.0));
	map1.insert(CustomPair(2, 10.5));
	map1.insert(CustomPair(3, 11.5));
	map1.insert(CustomPair(4, 13.5));
	map1.insert(CustomPair(5, 15.1));

	mmap1.insert(CustomPair(1, 9.5));
	mmap1.insert(CustomPair(2, 12.5));
	mmap1.insert(CustomPair(3, 17.1));

	map2 = map1;

	map2.erase(map2.begin());
	map2.erase(3);
	map2.erase(map2.begin(), map2.end());

	//元素交换swap
	map<int, double> mI1;
	map<int, double> mI2;
	mI1.insert(CustomPair(2, 9.9));
	mI1.insert(CustomPair(3, 19.9));
	mI1.insert(CustomPair(3, 0.1));
	mI1.insert(CustomPair(5, 9.9));
	mI2.insert(CustomPair(1, 7.1));
	mI2.insert(CustomPair(4, 1.9));
	mI1.swap(mI2);

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值