博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ map 使用
阅读量:2384 次
发布时间:2019-05-10

本文共 2890 字,大约阅读时间需要 9 分钟。

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;

转载地址:http://sauab.baihongyu.com/

你可能感兴趣的文章
php empty() isset() is_null()
查看>>
PHP学习-面向对象
查看>>
js页面跳转整理
查看>>
在64位Win7操作系统中安装Microsoft Access Engine的解决方案
查看>>
30类CSS选择器
查看>>
微信支付的使用介绍
查看>>
PHP单例模式应用详解
查看>>
冒号课堂§5.2:数据类型
查看>>
博客搬家
查看>>
冒号课堂§6.2:平台语言
查看>>
《关于信息系统组织方式的一个提案》的评论与反评
查看>>
冒号和他的学生们(连载10)——超级范式
查看>>
冒号和他的学生们(连载9)——泛型范式
查看>>
冒号和他的学生们(连载13)——范式总结
查看>>
A Proposal on Organization of Information System
查看>>
冒号和他的学生们(连载2)——首轮提问
查看>>
正则表达式与文件格式化处理
查看>>
Java EE互联网轻量级框架整合开发
查看>>
Java语言程序设计(基础篇)
查看>>
大型网站技术架构:核心原理与案例分析
查看>>