/**********************************************************************************/
/* 关联容器不提供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;
}
STL map和multimap型容器常用的成员
最新推荐文章于 2023-05-17 20:58:38 发布