不以物喜,不以己悲

C++ map用法

C++ map用法

map是STL的一个关联容器,它提供一对一(其中关键字只能在map中出现一次)的数据处理能力。

  1. 必须引入
#include<map>
  1. map的定义

    map<type1name, type2name> maps;//第一个是键的类型,第二个是值的类型

    map<string, int> maps;
    
    //也可以这样,需要C++11及以后支持
    ::map<int, string> maps = {
    		{2323, "sdff"},
    	{23322, "sdfsf2"},
    	{23211, "sdfsf"}
    	};
    
  2. map容器内元素的访问

    • 通过下标进行访问

      如: maps["c"] = 4;

    • 通过迭代器进行访问

      map可以使用it->first来访问键,使用it->second访问值

      #include <iostream>
      #include<map>
      #include<string>
      using namespace std;
      
      int main()
      {
      	::map<char, int> maps;
      	maps['d'] = 10;
      	maps['e'] = 20;
      	maps['a'] = 30;
      	maps['b'] = 40;
      
      	for (auto it = maps.begin(); it != maps.end(); it++)
      	{
      		cout << it->first << ":" << it->second << endl;
      	}
      	int c = ::getchar();
      }
      
  3. map的常用用法

    • maps.insert()插入

      #include <iostream>
      #include<map>
      #include<string>
      using namespace std;
      
      int main()
      {
      	// 定义一个map对象
      	::map<int, string> maps;
      	
      	// 用insert函数插入pair
      	maps.insert(::make_pair<int, string>(11, "sdf"));
          
      	auto res = maps.insert(std::make_pair<int, string>(2323, "sdfs"));
      	if (res.second) //插入成功
      	{
      
      	}
      	// 用insert函数插入value_type数据
      	maps.insert(::map<int, string>::value_type(22, "sdf3"));
      
      	maps[123] = "sdfsfsdf";
      	maps[33] = "测试";
      	for (auto it = maps.begin(); it != maps.end(); it++)
      	{
      		cout << it->first << ":" << it->second << endl;
      	}
      	int c = ::getchar();
      }
      
    • maps.find()查找一个元素

      #include <iostream>
      #include<map>
      #include<string>
      using namespace std;
      
      int main()
      {
      	// 定义一个map对象
      	::map<int, string> maps;
      	
      	// 用insert函数插入pair
      	maps.insert(::make_pair<int, string>(11, "sdf"));
      
      	// 用insert函数插入value_type数据
      	maps.insert(::map<int, string>::value_type(22, "sdf3"));
      
      	maps[123] = "sdfsfsdf";
      	maps[33] = "测试";
      	
      	auto f = maps.find(123);
      	if (f != maps.end()) //如果不等于end(),则表示找到了
      	{
      		cout << f->first << ":" << f->second << endl;
      	}
      	int c = ::getchar();
      }
      
    • maps.clear()清空

    • maps.erase()删除一个元素

      //迭代器删除
      	auto it = maps.find(123);
      	if (it != maps.end())
      	{
      		maps.erase(it);
      	}
      	
      	//关键字删除
      	int n = maps.erase(123); //如果删除了返回1,否则返回0
      
      	// 用迭代器范围删除
      	maps.erase(maps.begin(), maps.end());
      
    • maps.size()长度

    • maps.begin()返回指向map头部的迭代器

    • maps.end()返回指向map末尾的迭代器

    • maps.rbegin()返回指向map尾部的逆向迭代器

    • maps.rend()返回指向map头部的逆向迭代器

    • maps.empty()判断是否为空

    • maps.swap()交换两个map

posted @ 2021-02-23 11:20  这种人  阅读(680)  评论(0编辑  收藏  举报