map和multimap容器

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值