1.1 map基本概念
简介:
*map中所有的元素都是pair
*pair中第一个元素为key(键值),起到索引的作用,第二个元素为value(实值)
*所有元素都会根据元素的键值自动排序
*本质:
map和multimap属于关联式容器,迪岑结构是用二叉树实现的
*优点:
可以根据key值快速找到value值
*map和multimap区别:
map不允许容器中有重复的key元素
multimap允许容器中有重复的key值元素
1.2 map构造和赋值
构造:
map<T1,T2>mp;//map默认构造函数
map(const map &map);//拷贝构造函数
赋值:
map& operator=(const map &mp);//重载等号操作符
#include<iostream>
#include<map>
using namespace std;
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;
return;
}
//map容器 构造和赋值
void test01(){
map<int,int>m;
m.insert(pair<int,int>(3,30));
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(4,40));
m.insert(pair<int,int>(2,20));
printMap(m);
//拷贝构造
map<int,int>m2(m);
printMap(m2);
//赋值
map<int,int>m3;
m3=m2;
printMap(m3);
return;
}
int main(){
test01();
system("pause");
return 0;
}
1.3 map大小和交换
函数原型:
*size();//返回容器中元素的数目
*empty();//判断容器是否为空
*swap(st);//交换两个聚合容器
#include <iostream>
#include <map>
using namespace std;
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;
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(2, 20));
if (m.empty()) {
cout << "m为空" << endl;
} else {
cout << "m不为空" << endl;
cout << "m的大小为;" << m.size() << endl;
}
return;
}
//交换
void test02() {
map<int, int>m;
m.insert(pair<int, int>(1, 10));
m.insert(pair<int, int>(3, 30));
m.insert(pair<int, int>(2, 20));
map<int, int>m2;
m2.insert(pair<int, int>(4, 100));
m2.insert(pair<int, int>(5, 200));
m2.insert(pair<int, int>(6, 300));
cout << "交换前:" << endl;
printMap(m);
printMap(m2);
m.swap(m2);
cout<<"交换后:"<<endl;
printMap(m);
printMap(m2);
return;
}
int main() {
test01();
test02();
system("pause");
return 0;
}
1.4 map的插入和删除
insert(elem);
clear();
erase(pos);
erase(beg,end);
erase(key);
#include<iostream>
#include<map>
using namespace std;
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<<" ";
}
cout<<endl;
return;
}
//map容器 插入和删除
void test01(){
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());
printMap(m);
m.erase(3);//按照key删除,不会按照value删除。
printMap(m);
//清空== m.clear();
m.erase(m.begin(),m.end());
printMap(m);
return;
}
int main(){
test01();
system("pause");
return 0;
}
1.5 map查找和统计
find(key);//查找key是否存在,若存在,返回该键元素的迭代器;若不存在,返回set.end();
count(key);//统计key的元素个数
#include<iostream>
#include<map>
using namespace std;
//map容器 查找和统计
void test01(){
//查找
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<<"未找到元素"<<endl;
}
//统计
//multimap的count统计可能大于1
int num=m.count(3);
cout<<"num= "<<num<<endl;//对于map容器,num要么为1,要么为0,map不允许插入重复的元素
return;
}
int main(){
test01();
system("pause");
return 0;
}