[STL][C++]MAP

参考链接:http://blog.sina.com.cn/s/blog_61533c9b0100fa7w.html

 

map头文件

 #include <map>

 

map添加数据;

   map<int ,string> maplive;  
   1.maplive.insert(pair<int,string>(102,"aclive"));
   2.maplive.insert(map<int,string>::value_type(321,"hai"));
   3, maplive[112]="April";//map中最简单最常用的插入添加!

 

 

map中元素的查找:

   find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。        

   map<int ,string >::iterator l_it;; 
   l_it=maplive.find(112);
   if(l_it==maplive.end())
                cout<<"we do not find 112"<<endl;
   else cout<<"wo find 112"<<endl;

 

map中元素的删除:
   如果删除112;
   map<int ,string >::iterator l_it;;
   l_it=maplive.find(112);
   if(l_it==maplive.end())
        cout<<"we do not find 112"<<endl;
   else  maplive.erase(l_it);  //delete 112;

 

map的sort问题:
  Map中的元素是自动按key升序排序,所以不能对map用sort函数:

 

 map的基本操作函数:
      C++ Maps是一种关联式容器,包含“关键字/值”对
      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的函数

 

 

stl map容器中指针的释放

struct MyStruct
{
    int i;
    char c;

    MyStruct(int i, char c)
    {
        this->i = i;
        this->c = c;
    }
};

int stl_ptr_test()
{
    MyStruct* pst1 = new MyStruct(1, 'a');
    MyStruct* pst2 = new MyStruct(1, 'a');
    MyStruct* pst3 = new MyStruct(3, 'c');

    map<int, MyStruct*> map1; // 其中的value为指针型的

    map1.insert(pair<int, MyStruct*>(10, pst1));
    map1.insert(pair<int, MyStruct*>(11, pst2));
    map1.insert(pair<int, MyStruct*>(12, pst3));

    map<int, MyStruct*>::iterator iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    MyStruct* pst = iter->second;
    pst->c = 'b';

    iter = map1.find(11);
    cout << iter->second->i << ' ' << iter->second->c << endl;

    iter = map1.find(10);
    delete iter->second; // 释放指针
    map1.erase(10); // 从map中删除元素

    iter = map1.find(10);
    if (iter == map1.end())
    {
        cout << "not found" << endl;
    }
    else
    {
        cout << "found: " << iter->second->i << ' ' << iter->second->c << endl;
    }

    for (iter = map1.begin(); iter != map1.end();)
    {
        cout << iter->second->i << " " << iter->second->c << endl;

        delete iter->second; // 释放指针
        map1.erase(iter++); // 从map中删除元素,注意iter++的写法
    }

    map1.clear();

    return 0;
}

 

 

.//在遍历时删除

int main(int argc, char* argv[])
{
    map<string, string> mapData;
    
    mapData["a"] = "aaa"; 
    mapData["b"] = "bbb"; 
    mapData["c"] = "ccc"; 


    for (map<string, string>::iterator i=mapData.begin(); i!=mapData.end(); /*i++*/)
    {
        if (i->first == "b")
        {
            mapData.erase(i++);
        }
        else
        {
            i++;
        }
    }
    return 0;
}

 

posted @ 2015-06-01 13:28  南水之源  阅读(344)  评论(0编辑  收藏  举报