1. map的依赖--pair对组
pair是成对出现的数据: 两种定义形式:
①默认构造 pair<type,type> data (value1,value2);
②make_pair构造 pair<type,type> data = make_pair(value1,value2);
pair<string,int> p("code_dZt",28);
std::cout << p.first << " " << p.second << std::endl;
pair<string,int> p = make_pair("code_dZt",28);
std::cout << p.first << " " << p.second << std::endl;
2. map容器
map中所有元素都是pair对组。
map中第一个元素是KEY,可以起到索引作用;第二个元素是value。
所有元素都会根据元素的KEY值自动排序。
map容器属于 关联式容器,底层结构是用二叉树实现。
map容器中不允许存在重复的KEY值。
3. map构造与赋值
构造:①map<Type1,Type2> map_a; //默认构造函数
②map(const map &map_a); //拷贝构造函数
赋值:map& operator = (const map &map_a) ; //重载等号操作符
#include <map>
void fun_printfmap(map<int,int>&map_temp)
{
for(auto it = map_temp.begin();it != map_temp.end(); it++){
std::cout << "KEY:" << it->first << "value: " << it->second << std::endl;
}
std::cout << std::endl; //换行
}
//默认构造
map<int,int> map_m1;
map_m1.insert(pair<int,int>(1,40));
map_m1.insert(pair<int,int>(2,50));
map_m1.insert(pair<int,int>(3,60));
fun_printfmap(map_m1);
//拷贝构造
map<int,int> map_m2(map_m1);
fun_printfmap(map_m2);
//赋值
map<int,int> map_m3;
map_m3 = map_m1;
fun_printfmap(map_m3);
4. MAP容器的大小和交换
函数原型:①size(); //返回容器中元素的数目
②empty(); //判断容器是否为空
③swap(st); //交换两个集合容器
#include <map>
map<int,int> map_a;
map_a.insert(pair<int,int>(1,20));
map_a.insert(pair<int,int>(2,40));
map_a.insert(pair<int,int>(3,60));
if(map_a.empty()){
std::cout << "map_a 为空 " << std::endl;
}else{
std::cout << "map_a 不为空 " << "map_a的size:" << map_a.size() << std::endl;
}
map<int,int> map_b;
map_b.insert(pair<int,int>(4,200));
map_b.insert(pair<int,int>(5,400));
map_b.insert(pair<int,int>(6,600));
std::cout << "交换前: " << std::endl;
fun_pritfmap(map_a);
fun_pritfmap(map_b);
map_a.swap(map_b); //两个map交换
std::cout << "交换后: " << std::endl;
fun_pritfmap(map_a);
fun_pritfmap(map_b);
5. MAP容器的插入,删除和查找
函数原型:①insert(elem); //在容器中插入元素
②clear(); //清除map中所有元素
③erase(pos); // 删除pos迭代器所指的元素,返回下一个元素的迭代器
④erase(beg,end); // 删除区间(beg,end)的元素,返回下一个元素的迭代器
⑤erase(key) ;// 删除容器中KEY为key的元素
⑥find(key); // 查找key是否存在,返回该key对应元素的迭代器,若不存在,返回end();
map<int,int> map_1;
//第一种插入
map_1.insert(pair<int,int>(1,10));
//第二种插入
map_1.insert(make_pair(2,20));
//第三种插入
map_1.insert(map<int,int>::value_type(3,30));
//第四种插入 不建议使用该方法插入,但是可以通过key来访问value
map_1[4] = 40;
fun_pritfmap(map_1);
//第一种删除
map_1.erase(map_1.begin());
//第二种删除 会根据key进行删除
map_1.erase(3);
//第三种删除 根据区间进行删除
map_1.erase(map_1.begin(),map_1.end());
//第四种删除 清空
map_1.clear();
//查找
map_1<int,int>::iterator it;
it = map_1.find(2);
if(it != map_1.end){
std::cout << "找到了key,其value是:" << it->second << std::endl;
}else{
std::cout << "没有找到key"<< std::endl;
}