C++ map 使用

map常用成员(关联容器)----创建map<主键,主键对应的值>,增insert,删erase,改查找find,然后修改second,遍历iterator,获取元素个数size,判空empty  

 

        map是STL的一个关联容器,它提供一对一(第一个字段为关键字,每个关键字只能在map中出现一次,第二个字段称为该关键字的值)的数据处理能力,由于这个特性
        map内部的实现自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能。
头文件::
            #include <iostream>
            #include <map>
            using namespace std;
 
创建map对象::
           map<int ,string>    object;                       //map<主键,主键对应的值>
注意:
           在map<key,value>类型中对key的要求:
           因为map内部的实现采用的是一颗红黑树(类似平衡二叉树),所以,它要按照key值比较大小(弱排序),所以,对key类型的唯一要求是,它必须支持<操作,至于是否支持其他的关系或相等元算,不做要求。
          例如::  我们定义了一个类作为Key,那么必须让它支持<操作,否则是不可以的。
 
                                  增  insert     数组方式object[key_value] = value;
创建map的成员::
方法一、插入value_type          
         map<int,string>::value_type   value(1,"billchen");
         object.insert(value);
         也可以用   value.insert(map<int,string>::value_type(1,"billchen"));作用是一样的。   
方法二、插入pair或make_pair数据
         map<int,string>   object;
         object.insert(pair<int,string>(1,"billchen"));
         或者
         object.insert(make_pair(1,"billchen"));                    
         /*
                     其中pair是一个模板pair<T1,T2>  pvalue(v1,v2);表示创建一个pair对象,
            v1和v2的类型是T1和T2,值是v1和v2。
                     可以取出v1和v2的值,
                     分别是pvalue.first  为  v1
                                pvalue.second   为   v2
         */
         /*
            其中make_pair(v1,v2);表示以v1,v2创建一个新的pair对象,类型是v1和v2的类型。
             一般用在map的insert方法中,创建临时对象。
         */
方法三、数组方式
         map<int,string>    object;
         object[1]="billchen";         //object[key_value]=value;               (在key值对应的空间填写数据)
 
                                                 删  erase      clear
删除map中的一个元素,使用erase
方法一、通过迭代器删除         
         map<int,string>::iterator   iter = object.find(key);                    
         if(iter != object.end())
         {
                    object.erase(iter);                         
         }
方法二、通过key值删除
        object.erase(key);                   //删除成功,返回1,删除失败,返回0
删除map中的一段,如迭代器iter_begin到iter_end的元素:
        iter_begin = object.find(key_value1);
        iter_end = object.find(key_value2);
        if(iter_begin != object.end() && iter_end != object.end())
        {
                object.erase(iter_begin,iter_end);
        }
删除所有元素使用erase:
方法一、使用迭代器,遍历删除          
          map<int,string>::iterator iter=object.begin();
          while(iter!=object.end())
          {
                       object.erase(iter++);    //这样做,是为了防止迭代器失效。
          }
方法二、调用clear接口
         object.clear();
                                           改   (修改map中成员的值)
修改map中成员的值(迭代器):
          map<int,string>::iterator   iter = object.find(key);
          iter->second="wang";
修改map中成员的值(数组方式):
         map[key] = "wang";
例如:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(int argc,char *argv[])
{
        int i;
        map<char,string> obj;
        map<char,string>::value_type mem1('a',"billchen");
        obj.insert(mem1);
        map<char,string>::iterator iter = obj.begin();
        while(iter != obj.end())       
//修改
        {   
                iter->second="wang";
                iter++;
        }   
        iter=obj.begin();
        while(iter != obj.end())        
//遍历
        {   
                cout << iter->first << endl;
                cout << iter->second << endl;
                iter++;
        }   
        return 0;
}
                                                    查   find
查找使用find(主键);
       object.find(主键);
       返回值为iterator(迭代器),
       if(object.find(主键) == object.end())
       {
                 cout << "没有找到" <<endl;
       }
 
                                                   遍历
遍历方法1:    通过迭代器
         map<int,string>::iterator iter=object.begin(); 
          while(iter!=object.end())
          {
                       cout<<iter->first<<iter->second等等<<endl;
                       iter++;
         }
适当的情况下,可以使用数组的方式来进行map的遍历。
 
                                  获取map中成员的个数  size()
获取map中元素的个数:
          map<int,string> obj;
          map<int,string>::value_type mem1(1,"billchen");
          map<int,string>::value_type mem2(2,"chenbaihu");
          obj.insert(mem1);
          obj.insert(mem2);
          cout << obj.size() <<endl;
 
                          判断map是否为空,使用empty                                                 
为空,返回true,不为空,返回false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值