C++ STL——map

Map 使用帮助:

(一)常用函数:包含#include<map>

  1.  begin()                返回指向map头部的迭代器
  2.  clear()               删除所有元素
  3.  count()                返回指定元素出现的次数
  4.  empty()               如果map为空则返回true
  5.  end()                   返回指向map末尾的迭代器
  6.  equal_range()     返回特殊条目的迭代器对
  7.  erase()                删除一个元素
  8.  find()                   查找一个元素
  9.  get_allocator()    返回map的配置器
  10.  insert()                插入元素
  11.  key_comp()        返回比较元素key的函数
  12.  lower_bound()    返回键值>=给定元素的第一个位置
  13.  max_size()         返回可以容纳的最大元素个数
  14.  rbegin()              返回一个指向map尾部的逆向迭代器
  15.  rend()                 返回一个指向map头部的逆向迭代器
  16.  size()                  返回map中元素的个数
  17.  swap()                交换两个map
  18.  upper_bound()    返回键值>给定元素的第一个位置
  19.  value_comp()      返回比较元素value的函数 

 

重点使用函数说明:

  • 1.map的插入:

map<int,string>map1;

(1)map1.insert(pair<int,string>(1,"aaa"));

(2)map1.insert(map<int,string>::value_type(2,"bbb"));

(3)map1[3]="ccc";

 

  • 2.map的删除:

map使用find()查找,使用迭代器接收查找返回的值,若未找到返回尾部迭代器,若找到使用erase()

(1)map1.erase(iter);

 

  • 3.map的修改

(1)map1[1]="ddd";

若没有此key,则新插入此键值对

 

  • 4.map的查找:

map自身查找使用find(),通过该函数返回一个key,如果没找到就返回指向map尾部的迭代器

iter = map1.find(key);

If(iter != map1.end())  //找到

 

  • 5.map的sort问题:

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

 

)常用函数代码实现:

#include <map>
#include <iostream>
using namespace std;

int main()
{
    //map定义
    map<int, string> map1;
    
    //使用[]赋值
    map1[0] = "a";
    map1[1] = "b";
    map1[2] = "c";
    
    
    //使用迭代器遍历
    map<int, string>::iterator iter;
    for (iter = map1.begin(); iter != map1.end(); ++iter)
    {
        cout << iter->first << " : " << iter->second << endl;
    }
    
    //map元素个数
    cout <<map1.size() << endl;
    
    //修改映射值,注:使用[]修改值,如果没有此key,则插入键值对
    map1[0] = "ccc";
    map1[4] = "ddd";
    
    //插入键值对<5, "eee">
    map1.insert(pair<int,string>(5, "eee"));
    cout << "5: " << map1.find(5)->second << endl;
    
    //插入键值对<6, "kkk">
    map1.insert(map<int,string>::value_type(6, "kkk"));
    cout << "6: " << map1.find(6)->second << endl;
    
    
    //操作易错点:若插入已存在的键,则此键对应的值不变,且编译器不会报错
    map1.insert(pair<int,string>(2, "eee"));
    cout << "2: " << map1.find(2)->second << endl;
    
    //删除键为1的键值对
    iter = map1.find(1);
    if (iter != map1.end())
    {
        map1.erase(iter);
    }
    
    //使用函数清空map
    while (!map1.empty()) 
    {
        map1.erase(map1.begin());
    }
    
    
    return 0;
}

Map 文字补充说明:

map 容器中存储了若干键值对,这些键值对都是由关键值 (Key Value) 和映射值 (Mapped Value) 配对组成的,具体说明如下:

  • 在一个 map 中, Key 值通常用来排序或特指元素,映射值用来存储与该 Key 值绑定的内容。 Key 值与映射值的数据类型可以不同,而且可以一起被放进成员类型 value_type 中,value_type 是一种配对类型,定义如下:

typedef pair<const Key, T> value_type;

  • 在 map 内部的元素通常按照其 Key 值排序,且排序方式是根据某种明确、严格的弱排序标准进行的,这种排序标准是由 map 内部的比较对象(即 map::key_comp)指定的。
  • map 容器通过 Key 值访问特定元素的速度,相较于 unordered_map 容器通常较慢,但 map 容器允许基于它们的顺序对子集进行直接迭代。
  • map 中的映射值可以使用括号运算符 (operator[]) 通过其关联的 Key 值直接访问。
  • map 通常使用二叉搜索树实现。

map 容器属性:

  • 关联性: 关联容器中的元素的参考地址指的是其 Key 值,而不是他们在容器中的绝对地址;
  • 有序性: 容器中的元素一直按照排序方式严格排序,所有插入元素都按照该顺序排列;
  • 映射: 每个元素中,一个 Key 值与一个映射值相关。Key 值是用来标识其主要内容是映射值的元素;
  • 唯一 Key 值: 容器中不存在同时拥有相同 Key 值的两个元素;
  • 分配感知 (Allocator-aware): map 容器使用分配器对象动态处理其存储需求。

 

 

注:文章为综合总结,只为给自己提供编程时可用的工具书

猜你喜欢

转载自blog.csdn.net/Jecklin_online/article/details/81218027