C++ Map集合使用基础

1、map 查找 可以通过[]进行查找

1.示例:
#include <iostream>
#include <string>
#include <map>

using namespace std;

int main()
{
    map<string, int> m;
    //关联容器的形式
    m.insert(pair<string, int>("ming",18));//不可能插入重复的key,再次插入相同key的pair对象,无法插入
    //通过[]形式
    m["ming1"] = 20;//如果[]中的key不存在,插入;如果[]中的key已经存在,那么修改value

    int v = m["ming1"];//通过key查找value
    cout << v <<endl;
}
/*
输出:
20
*/

2.示例:count("ming")函数,count查找该key (key是“ming”) 出现的次数,返回值可能是0或者1 
        0表示没有该key,1表示有而且数量就是1

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(){

    map<string, int> m;
    //关联容器的形式
    m.insert(pair<string, int>("ming",18));
    cout<<m.count("ming")<<endl;//1
    cout<<m.count("H")<<endl;//0
}
/*
输出:
1
0
*/

注意:是否会新建对象:     
m["aaa"] = 6;//会  aaa,6
cout<< m["bbb"]<<endl;  // 会  bbb,0
cout<< m.count("bbb")<<endl;// 不会新建//有 ,返回1, 不新建 

 

 

3.示例:find()函数进行查找,find返回该key的迭代器对象

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main(){
    
    map<string, int> m;
    //关联容器的形式
    m.insert(pair<string, int>("ming",18));
    map<string, int>::iterator iter = m.find("ming");//find返回该key的迭代器对象(迭代器指针)
    if(iter != m.end())
    {
        cout<<iter->first<<" "<<iter->second<<endl;
    }
    else
    {
        cout<<"not.."<<endl;
    }
    
}    
/*
输出:
ming 18
*/    
 

 2、map 删除  

 

4.map 删除  
从m中删除key为k的元素   m.erase(k)   

int main()
{
    pair<string,int> p("aa",12);

    map<string,int> m;
    m.insert(pair<string,int>("xiao",16));
    m.insert(pair<string, int>("jack", 18));
  
     m["aaa"] = 6;//会新建

   cout<<m["bbb"]<<endl;//会
   
   //删除key值为aaa的元素
   m.erase("aaa");

     for(map<string,int>::iterator iter = m.begin();iter != m.end();iter++)
     {
         cout<<iter->first<<" "<<iter->second<<endl;
     }

    return 0;
}
/*
输出:
0
bbb 0
jack 18
xiao 16
*/

示例2:删除  从m中删除迭代器p指定的元素  m.erase(p)  

int main()
{
 

    map<string,int> m;
    m.insert(pair<string,int>("xiao",16));
    m.insert(pair<string, int>("jack", 18));
     m.insert(pair<string, int>("rose", 1));
     m.insert(pair<string, int>("tom", 2));
     m.insert(pair<string, int>("jerry", 3));

     m["aaa"] = 6;


   map<string,int>::iterator iter = m.find("tom");
   
   //通过迭代器删除
   m.erase(iter);

     for(map<string,int>::iterator iter = m.begin();iter != m.end();iter++ )
     {
         cout<<iter->first<<" "<<iter->second<<endl;
     }

    return 0;
}
/*
输出:
aaa 6
jack 18
jerry 3
rose 1
xiao 16
*/

 

5.map自定义key类型  
需要重载运算符 < 并定义常函数(函数定义为const函数后被调用)


示例:
#include <iostream>
#include <map>
#include <string>

using namespace std;
//自定义key类型
class Person
{
public:
    Person(const char* name):name(name)//隐式转换, "xxxx"的返回值是char*, 不用string类型
    {
        
    }
    //数据排序定义
    bool operator<(const Person& other) const //常函数
    {
        return name < other.name;
    }
    string getName() const
    {
        return name;
    }
private:
    string name;
};

int main()
{
    map<Person, int> m;
    m.insert(pair<Person, int>(Person("jack"), 18));
    m.insert(pair<Person, int>("rose", 1));//隐式转换
    m.insert(pair<Person, int>("tom", 2));
    m.insert(pair<Person, int>("jerry", 3));
    
    for(map<Person, int>::iterator iter = m.begin();iter != m.end();iter++)
    {
        cout<<iter->first.getName()<<" "<<iter->second<<endl;
        //iter->first.getName()调用常函数
    }
    
    return 0;
}
/*
输出:
jack 18
jerry 3
rose 1
tom 2
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值