c++ map 记录。为了自己记录理解

来源:互联网 发布:阿里云域名访问不了 编辑:程序博客网 时间:2024/05/21 00:49

容器map,存在形式为key—value键值对。实际就是pair类型。

 map定义的类型:

            map<K,V>::key_type      在map中用做索引的键的类型

            map<K,V>::mapped_type    在map中键所关联的值的类型

            map<K,V>::value_type       一个pair类型,它的first元素具有const map<K,V>::key_type 类型,而second元素则为map<K,V>::mapped_type类型

   map迭代器进行解引用将产生pair类型的对象,如:

           map<string,int>::iterator map_it = word_count.begin();

           cout<<map_it->first<<""<<map_it->second<<endl;

  

 使用Insert对map进行插入:

              m .insert(e)                e是一个用在m上的value_type类型的值,如果e.first不在m中则插入一个值为.second的新元素,否则该键值在m中已经存在则保持不变,该 函数返回一个pair新类型,包含一个指向键值为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入该元素     例如:std::pair<std::map<自己要用的key和value类型>::iterator,bool>

              m.insert(beg,end)       插入beg、end标记范围内的元素,如果该元素的m.first已经存在则不插入否则插入。返回void类型

              m.insert(iter,e)           如果e.first不在m中,则创建新元素,并以迭代器iter为起点搜索新元素的存储位置,否则返回一个迭代器,指向m中具有的给定键的元素。

  从map中删除元素 ,使用erase与顺序容器功能一样:

     m.erase(k) 删除m中键为k的元素。返回值为被删除元素的个数,对于map容器而言,其值必然是0或1。

     m.erase(p) 从m中删除迭代器p所指向的元素。返回值为void类型。

     m.erase(b,e) 从m中删除一段由一对迭代器范围的元素。返回值为void类型。

练习:

#include <iostream>
#include <map>


using std::string;
using std::cout;
using std::endl;
 
void print_m(std::map<string,int> &obj)
{
    typedef std::map<string,int> mp;
    mp::iterator it;


    cout<<"map:";
    for (it = obj.begin();it != obj.end();it++)
        cout<<it->first<<" "<<it->second<<endl;
    cout<<endl;
}
int main(int argc,char *argv[])
{
    std::map<string,int> m;


    m.clear();
    cout<<"m1.size():"<<m.size()<<" m1.empty():"<<m.empty()<<endl;
    
    m["s1"] = 1;
    m["s2"] = 2;
    m["s1"] = 11;


    std::map<string,int>::key_type key;
    key = "p1";
    std::map<string,int>::mapped_type key_v;
    key_v = 3;
    std::map<string,int>::value_type value(key,key_v);
    
    std::pair<std::map<string,int>::iterator,bool> ret;
    ret = m.insert(value);
    cout<<"pair value_type insert() return:"<<ret.first->first<<" "<<ret.first->second<<" "<<ret.second<<endl;


    ret = m.insert(std::pair<string,int>("p2",4));
    cout<<"pair direct insert() return:"<<ret.first->first<<" "<<ret.first->second<<" "<<ret.second<<endl;
    
    ret = m.insert(std::pair<string,int>("p2",4));
    cout<<"pair repeat insert() return:"<<ret.first->first<<" "<<ret.first->second<<" "<<ret.second<<endl;
    print_m(m);


    m.insert(m.begin(),std::pair<string,int>("b3",5));
    print_m(m);
    
    m.insert(++m.begin(),std::pair<string,int>("b4",6));
    print_m(m);


    m.insert(m.end(),std::pair<string,int>("e3",7));
    print_m(m);


    m.insert(++m.end(),std::pair<string,int>("e4",8));
    print_m(m);


    m.insert(++m.end(),std::pair<string,int>("e4",9));
    print_m(m);


    cout<<"m1.size():"<<m.size()<<" m1.empty():"<<m.empty()<<endl;
    m.erase(key);
    print_m(m);


    m.erase(++m.begin());
    print_m(m);
    return 0;
}


0 0
原创粉丝点击