C++ map用法小结

工作中用到了map,做个简单的小结

1.map介绍

在c++中map是一种键值对容器,有几个特点

  • map提供一对一的键值对操作,以<key,value>的形式出现,,其中key是唯一的,key和value可以是任意类型,包括自定义类型
  • map的内部为一棵红黑树,默认会对key从大到小进行排序操作

2.map的使用

1.头文件

#include <map>

2.map的初始化

map对象是一个模板类,需要key,value两个关键字

map<std::string,char> map1
map<std::string,char> map2(map1)
map<std::string,char> map3(map1.begin(),map1.end());

需要注意的点:在map中直接使用char*作为key,在后面使用key做find操作时,会找不到之前插入的元素,原因是做find操作时,使用“==”进行判断,但是char*只是一个指针,两次比较的地址值不一样,会导致找不到插入的元素

3.元素插入

map<int,std::string> Mymap;

//1.使用数组方式插入
map[1] = "first";
map[2] = "second";

//2.insert插入pair数据
Mymap.insert(pair<int,std::string>(3,"third"));

//3.insert 函数插入 value_type 数据
Mymap.insert(map<int,std::string>::value_type(4,"four"));

4.元素遍历

  • 数组方式
using namespace std;
map<int,string> Mymap;


//方法一.数组方式遍历
int size = Mymap.size();
for(int i = 0;i < size;i++){
    cout << Mymap[i]<<endl;
}

//方法二.前向迭代器
for (auto it = Mymap.begin(); it != Mymap.end(); it++) { cout << it -> first << " " << it -> second << endl; }

//方法三.反向迭代器
std::map < int, string > ::reverse_iterator iter; for(iter = Mymap.rbegin(); iter != mapPerson.rend(); iter++) cout<<iter->first<<" "<<iter->second<<endl;

//方法四:c++11 版本及以上
for(auto it:Mymap) {
    cout << it.first << " " << it.second << endl;
}

//方法五:c++17 版本及以上
for (auto [key, val] : Mymap) { 
    cout << key << " " << val << endl; 
}

5.元素查找

find(key): 返回值是key的映射的迭代器,如果没有,返回的迭代器和end函数的值相同

// find 返回迭代器指向当前查找元素的位置否则返回map::end()位置
iter = mp.find("1");
 
if(iter != mp.end()){
       cout<<"the value is"<<iter->second<<endl;
}
else{
   cout<<"can not find "<<endl;
}

6.删除和清空元素

//1.iterator erase(iterator it) ;//通过一个条目对象删除
iter = mp.find("1");
mp.erase(iter);

//2.iterator erase(iterator first,iterator last); //删除一个范围 
mp.erase(mp.begin(), mp.end())//清空map

//3.size_type erase(const Key&key); //通过关键字删除 
int ret = mp.erase("1"); //刪除了会返回1,否则返回0

//4.清空map
mp.clear()//mp.erase(mp.begin(),mp.end());

7.map的大小

int len = mp.size();

8.其他基本函数

    begin()                  返回指向 map 头部的迭代器

    clear()                 删除所有元素

    count()                  返回指定元素出现的次数

    empty()                 如果 map 为空则返回 true

    end()                     返回指向 map 末尾的迭代器

    equal_range()        返回特殊条目的迭代器对

    erase()                   删除一个元素

    find()                     查找一个元素

    get_allocator()          返回map的配置器

    insert()                  插入元素

    key_comp()          返回比较元素key的函数

    lower_bound()     返回键值>=给定元素的第一个位置

    max_size()            返回可以容纳的最大元素个数

    rbegin()                返回一个指向map尾部的逆向迭代器

    rend()                   返回一个指向map头部的逆向迭代器

    size()                    返回map中元素的个数

    swap()                 交换两个map

    upper_bound()    返回键值>给定元素的第一个位置

    value_comp()       返回比较元素value的函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值