zoukankan      html  css  js  c++  java
  • c++中stl----map

    1 map的本质

    (1)关联式容器,键值对应

    (2)增加和删除节点对迭代器的影响很小。

    (3)对于迭代器来说不可以修改键值,只能修改对应的实值。

    (4)map内部数据的祖居是自建一颗红黑树(或者说是平衡二叉树),具有自动排序的功能。

    2 map的查增删

    (1)map的插入

     1 #include <map>
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     //方式一 pair
     9     map<int,string> mapStudent;
    10     mapStudent.insert(pair<int,string>(1,"lan"));
    11     mapStudent.insert(pair<int,string>(2,"ji"));
    12     mapStudent.insert(pair<int,string>(1,"kjh"));
    13     map<int,string>::iterator iter;
    14     map<int,string>::iterator iter1;
    15     //方式二
    16     map<int string> mapStudent1;
    17     mapStudent1.insert(map<int,string>::value_type(1,"nihao"));
    18     mapStudent1.insert(map<int,string>::value_type(1,"ben"));
    19     for(iter=mapStudent.begin();iter!=mapStudent.end();iter++)
    20     {
    21         cout<<iter->first<<" "<<iter->second<<endl;
    22     }
    23     for(iter=mapStudent1.begin();iter!=mapStudent1.end();iter++)
    24     {
    25         cout<<iter->first<<" "<<iter->second<<endl;
    26 
    27     }
    28     return 0;     
    29 }
    View Code

    2 map的遍历

     1 #include <map>
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     map<int,string> mapStudent;
     9     mapStudent[1]="stu_one";
    10     mapStudent[1]="stu_two";
    11     mapStudent[1]="stu_three";
    12     map<int,string>::iterator iter = mapStudent.find(1);
    13     if(iter!=mapStudent.end())
    14     {
    15         cout<<"找到了 value="<<iter->second<<endl;
    16     }else
    17     {
    18         cout<<"没有找到"<<endl;
    19     }
    20     return 0;
    21 }
    View Code

    3 map的删除

     1 #include <map>
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     map<int,string> mapStudent;
     9     mapStudent[1]="stu_one";
    10     mapStudent[1]="stu_two";
    11     mapStudent[1]="stu_three";
    12     map<int,string>::iterator iter = mapStudent.begin();
    13     for(;iter!=mapStudent.end();)
    14     {
    15         if((*iter).sencond=="stu_one")
    16         {
    17             mapStudent.erase(iter++);//iter被erase以后就会失效 所以后面不能再有iter++
    18         }else
    19         {
    20             ++iter;
    21         }
    22     }
    23     for(iter=mapStudent1.begin();iter!=mapStudent1.end();iter++)
    24     {
    25         cout<<iter->first<<" "<<iter->second<<endl;
    26 
    27     }
    28     return 0;
    29 }
    View Code

    4 map排序

    默认按照key从小到大。从大到小greater 相反less

     1 #include <map>
     2 #include <string>
     3 #include <iostream>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string,int,greater<string>> mapStudent;
     8     mapStudent['nisan']=90;
     9     mapStudent['nisan']=70;
    10     mapStudent['nisan']=80;
    11     map<string,int>::iterator iter = mapStudent.begin();
    12     for(iter=mapStudent.begin();iter!=mapStudent.end();iter++)
    13     {
    14         cout<<iter->first<<" "<<iter->second<<endl;
    15     }
    16     return 0;
    17 }
    View Code

    自定义排序方式

     1 #include <string>
     2 #include <iostream>
     3 using namespace std;
     4 struct CmpByKeyLength
     5 {
     6     bool operator()(const string &k1,const string&k2){
     7         return k1.length()<k2.length();
     8     }
     9 };
    10 int main()
    11 {
    12     map<string,int,CmpByKeyLength>mapStudent;
    13     mapStudent['nisan']=90;
    14     mapStudent['nisan']=70;
    15     mapStudent['nisan']=80;
    16     map<string,int>::iterator iter = mapStudent.begin();
    17     for(iter=mapStudent.begin();iter!=mapStudent.end();iter++)
    18     {
    19         cout<<iter->first<<" "<<iter->second<<endl;
    20     }
    21     return 0;
    22 }
    View Code

    ------>加油美好的一天

  • 相关阅读:
    WPF技巧:通过代码片段管理器编写自己常用的代码模板提示效率
    C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第二部分
    C# 8.0和.NET Core 3.0高级编程 分享笔记二:编程基础第一部分
    WPF教程十一:简单了解并使用控件模板
    C# 8.0和.NET Core 3.0高级编程 分享笔记一:C#8.0与NET Core 3.0入门
    WPF教程十:如何使用Style和Behavior在WPF中规范视觉样式
    概率论与数理统计图式(第一章 概率论的基本概念)1.2概率
    概率论与数理统计图式(第一章 概率论的基本概念)1.1随机事件与随机变量
    软件工程基础图式(第三章 需求分析)
    软件工程基础图式(第二章)
  • 原文地址:https://www.cnblogs.com/lanjianhappy/p/8945191.html
Copyright © 2011-2022 走看看