zoukankan      html  css  js  c++  java
  • 【C++】map容器的用法

    检测map容器是否为空:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     //检测容器是否为空
     8     map<string, string>mapText;
     9     if (mapText.empty())
    10     {
    11         cout << "mapText为空" << endl;
    12     }
    13     else
    14     {
    15         cout << "mapText不为空" << endl;
    16     }
    17     
    18     //向容器中添加元素
    19     mapText["小A"] = "A"; //赋值
    20     mapText["小B"] = "B"; //赋值
    21     mapText["小C"] = "C"; //赋值
    22     
    23     if (mapText.empty())
    24     {
    25         cout << "mapText为空" << endl;
    26     }
    27     else
    28     {
    29         cout << "mapText不为空" << endl;
    30     }
    31 
    32     system("pause");
    33     return 0;
    34 }

     


     重复赋值,值被替换:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A"; //赋值
     9     mapText["小A"] = "B"; //重复赋值
    10     cout << mapText["小A"] << endl;
    11 
    12     system("pause");
    13     return 0;
    14 }


     判断键是否存在,如果不存在再赋值:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A";     //赋值
     9      //先检测键是否存在,如果存在则不赋值
    10     if (mapText.count("小A") == 0)  //count==0不存在 count==1存在
    11     {
    12         mapText["小A"] = "B"; //重复赋值
    13     }
    14     cout << mapText["小A"] << endl;
    15 
    16     system("pause");
    17     return 0;
    18 }


     map循环遍历:

    map.begin()指向map的第一个元素

    map.end()指向map的最后一个元素之后的地址

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A";     //赋值
     9     mapText["小B"] = "B";     //赋值
    10     mapText["小C1"] = "C";     //赋值
    11     mapText["小C2"] = "C";     //赋值
    12     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    13     {
    14         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    15 
    16     }
    17     system("pause");
    18     return 0;
    19 }


     map 通过“键”删除键值对:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A";     //赋值
     9     mapText["小B"] = "B";     //赋值
    10     mapText["小C1"] = "C";     //赋值
    11     mapText["小C2"] = "C";     //赋值
    12     cout << "删除前:" << endl;
    13     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    14     {
    15         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    16 
    17     }
    18     //删除小B
    19     mapText.erase("小B");
    20     cout << "删除后:" << endl;
    21     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    22     {
    23         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    24 
    25     }
    26     mapText.erase("小B"); //小B不存在,erase也不会报错
    27     system("pause");
    28     return 0;
    29 }


      map 通过“值”删除键值对,先写一个错误用法,这里要注意:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A";     //赋值
     9     mapText["小B"] = "B";     //赋值
    10     mapText["小C1"] = "C";     //赋值
    11     mapText["小C2"] = "C";     //赋值
    12     cout << "删除前:" << endl;
    13     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    14     {
    15         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    16 
    17     }
    18     //删除值为C的元素
    19     //错误用法:
    20     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    21     {
    22         if ((itor->second) == "C")
    23         {
    24             mapText.erase(itor);
    25         }
    26     }
    27 
    28     cout << "删除后:" << endl;
    29     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    30     {
    31         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    32 
    33     }
    34     system("pause");
    35     return 0;
    36 }

    错误原因:itor指针在元素被删除后失效了,回到for语句中与mapText.end()进行比较出现错误。


     map 通过“值”删除键值对,正确的用法:

     1 #include <iostream>
     2 #include<map>
     3 #include<string>
     4 using namespace std;
     5 int main()
     6 {
     7     map<string, string>mapText;
     8     mapText["小A"] = "A";     //赋值
     9     mapText["小B"] = "B";     //赋值
    10     mapText["小C1"] = "C";     //赋值
    11     mapText["小C2"] = "C";     //赋值
    12     cout << "删除前:" << endl;
    13     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    14     {
    15         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    16 
    17     }
    18     //删除值为C的元素
    19     //正确用法:
    20     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); /*++itor*/)
    21     {
    22         if ((itor->second) == "C")
    23         {
    24             itor = mapText.erase(itor);
    25         }
    26         else
    27         {
    28             ++itor;
    29         }
    30     }
    31 
    32 
    33     cout << "删除后:" << endl;
    34     for (map<string, string>::iterator itor = mapText.begin(); itor != mapText.end(); ++itor)
    35     {
    36         cout << "key = " << itor->first << ", value = " << itor->second << endl;
    37 
    38     }
    39     system("pause");
    40     return 0;
    41 }


    删除map的第一个元素

    mapText.erase(mapText.begin());
  • 相关阅读:
    002-Linux下防火墙相关命令操作
    001-网卡配置
    vs2012中自带IIS如何让其他电脑访问
    001-Mono for android在vs2012中发布设置
    小知识:utf-8和utf8mb4字符集
    Maven 模块化开发
    JUnit 单元测试
    解决8080端口占用问题
    (三)Tomcat服务器 -------JavaWeb的学习之路
    (一)走进JavaWeb的世界 -------JavaWeb的学习之路
  • 原文地址:https://www.cnblogs.com/KMould/p/12057985.html
Copyright © 2011-2022 走看看