C++基础之map容器

26 篇文章 1 订阅
21 篇文章 2 订阅

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;
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值