寒假训练——day11

自学STL之map

简介:

  • map中所有元素都是pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序

本质:

  • map/multimap属于关联式容器,底层结构是用二叉树实现。

优点:

  • 可以根据key值快速找到value值

函数原型:

  • insert(elem); //在容器中插入元素。
  • clear(); //清除所有元素
  • erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
  • erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  • erase(key); //删除容器中值为key的元素。
  • size(); //返回容器中元素的数目
  • empty(); //判断容器是否为空
  • swap(st); //交换两个集合容器
  • find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  • count(key); //统计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<<endl;
    }
    cout<<endl;
}
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));
    //第四钟(一般不用来插入,一般用于通过key找value)
    m[4]=40;  
    printMap(m);

    //删除

    m.erase(m.begin());
    printMap(m);
    
    m.erase(3);//把key值为3的元素删除,也就是把30删除了,这个是按key值查找的
    printMap(m);
    
//    m.erase(m.begin(),m.end());
    m.clear();
    printMap(m);
}

int main(){
    test01();
    return 0;
}

查找和统计:

#include<iostream>
#include<map>
using namespace std;

void test01(){
    map<int,int> m;
    m.insert(make_pair(1,10));
    m.insert(make_pair(2,20));
    m.insert(make_pair(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;
    }
    //统计  因为map不允许有重复的key值,所以每一个key值对应的value要么有(1)要么没有(0)
    int num = m.count(1);
    cout<<num<<endl;
    int num1 = m.count(4);
    cout<<num1<<endl;
}
int main(){
    test01();
    return 0;
}

总结:
1、利用仿函数可以指定map容器的排序规则
2、对于自定义数据类型,map必须要指定排序规则,同set容器
3、还是得多用题目练习这些容器,继续加油!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值