#include<iostream>
using namespace std;
#include<string>
//pair对组的创建
void test01()
{
//第一种方式
pair<string,int>p("Tom",20);
cout<<"name:"<<p.first<<" age:"<<p.second<<endl;
//第二种方式
pair<string,int>p2=make_pair("Jerrry",30);
cout<<"name:"<<p2.first<<" age:"<<p2.second<<endl;
}
int main()
{
test01();
}
map和multimap属于关联式容器,底层结构用二叉树实现
map的所有元素都是pair
map不允许容器中有重复的key元素
multimap允许容器中有重复的key元素
都会根据键值自动排序
#include<iostream>
using namespace std;
#include<map>
void printMap(map<int, int>&m)
{
for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
{
cout<<"key="<<(*it).first<<" value="<<it->second<<endl;
}
cout<<endl;
}
void test01()
{
map<int, int> m;//按照key排序
m.insert(pair<int, int>(1,10));
m.insert(pair<int, int>(2,20));
m.insert(pair<int, int>(5,50));
m.insert(pair<int, int>(3,30));
printMap(m);
//拷贝构造
map<int, int> m2(m);
printMap(m2);
//赋值
map<int, int> m3;
m3=m2;
printMap(m3);
}
void test02()
{
map<int, int>m;
m.insert(pair<int, int>(1,10));
m.insert(pair<int, int>(2,20));
m.insert(pair<int, int>(3,30));
if(m.empty())
{
cout<<"m空"<<endl;
}
else
{
cout<<"m不空"<<endl;
cout<<m.size()<<endl;
}
}
void test03()
{
map<int, int> m;
m.insert(pair<int, int>(1,10));
m.insert(pair<int, int>(2,20));
m.insert(pair<int, int>(5,50));
m.insert(pair<int, int>(3,30));
map<int, int> m2;
m2.insert(pair<int, int>(6,10));
m2.insert(pair<int, int>(7,20));
m2.insert(pair<int, int>(8,50));
m2.insert(pair<int, int>(9,30));
cout<<"交换前"<<endl;
printMap(m);
printMap(m2);
cout<<"交换后"<<endl;
m.swap(m2);
printMap(m);
printMap(m2);
}
//插入与删除
void test04()
{
map<int, int>m;
//插入
//一
m.insert(pair<int,int>(1,10));
//二
m.insert(make_pair(2,20));
//三
m.insert(map<int,int>::value_type(3,30));
//四
m[4]=40;
//[]不建议此种方式插入,但可以利用key访问到value
//cout<<m[5]<<endl;
printMap(m);
//删除
m.erase(m.begin());
m.erase(3);//按key删
// m.erase(m.begin(),m.end());// 清空
m.clear();//清空
printMap(m);
}
void test05()
{
//查找
map<int, int>m;
m.insert(pair<int,int>(1,10)) ;
m.insert(pair<int,int>(2,20)) ;
m.insert(pair<int,int>(3,30)) ;
map<int,int>::iterator pos=m.find(3);
if(pos!=m.end())
{
cout<<"查到了元素key="<<(*pos).first<<" value="<<pos->second<<endl;
}else
{
cout<<"no"<<endl;
}
//统计
//map容器中不允许插入重复的key元素,对于count统计而言,要么0,要么1
//multimap的统计可能大于1
int num=m.count(3);
cout<<num<<endl;
}
//排序 利用仿函数改变排序规则
class MyCompare
{
public:
bool operator()(int v1,int v2)
{
//降序
return v1>v2;
}
};
void test06()
{
map<int, int,MyCompare>m;
m.insert(make_pair(1,10)) ;
m.insert(make_pair(2,20)) ;
m.insert(make_pair(5,50)) ;
m.insert(make_pair(3,30)) ;
m.insert(make_pair(4,40)) ;
for(map<int,int,MyCompare>::iterator it=m.begin();it!=m.end();it++)
{
cout<<"key="<<(*it).first<<" value="<<it->second<<endl;
}
cout<<endl;
}
int main()
{
test06();
}