zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++ map总结

C++Map 总结
2023-09-14 09:05:45 时间

目录

介绍

常用函数

函数实例

插入元素,并判断是否插入成功

遍历map

查找元素

删除元素


介绍

map是STL的一个关联容器,它提供一对一的hash。

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
  • 第二个可能称为该关键字的值(value);
    map以模板(泛型)方式实现,可以存储任意类型的数据,包括使用者自定义的数据类型。Map主要用于资料一对一映射(one-to-one)的情況,map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能。在map内部所有的数据都是有序的,如下图:
  • https://images2015.cnblogs.com/blog/542815/201702/542815-20170213225443957-1135271755.png

常用函数

begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数

empty() 如果map为空则返回true
end()   返回指向map末尾的迭代器

equal_range()    返回特殊条目的迭代器对

erase() 删除一个元素
find()  查找一个元素
insert()插入元素
max_size()返回可以容纳的最大元素个数
 size()  返回map中元素的个数
 swap()  交换两个map

 get_allocator()  返回map的配置器
  key_comp()       返回比较元素key的函数
  lower_bound()    返回键值>=给定元素的第一个位置
  max_size()       返回可以容纳的最大元素个数
  rbegin()         返回一个指向map尾部的逆向迭代器
  rend()           返回一个指向map头部的逆向迭代器
   upper_bound()     返回键值>给定元素的第一个位置
   value_comp()      返回比较元素value的函数

函数实例

插入元素,并判断是否插入成功

#include <map>

#include <iostream>

using namespace std;

 

int main()

{

 

    map<int, string> myMap;

    // 第一种 用insert函數插入pair

    myMap.insert(pair<int,string>(01, "aa"));

    // 第二种 用insert函数插入value_type数据

    myMap.insert(map<int, string>::value_type(02, "bb"));

    // 第三种 用"array"方式插入

    myMap[33] = "cc";

    // 构造定义,返回一个pair对象,验证是否添加成功

    pair<map<int, string>::iterator, bool> Insert_Pair;

    Insert_Pair = myMap.insert(map<int, string>::value_type(33, "cc"));

    if (!Insert_Pair.second)

        cout << "Error insert new element" << endl;

    cout << "\n";

    return 0;

}

遍历map

#include <iostream>

#include <map>

using namespace std;

 

int main() {

    map<int, int> m;

    for (int i = 0; i < 5; i++) {

        m[i] = i * i;

    }

    //第一种遍历方式,迭代器+while

    map<int, int>::iterator iter;

    iter = m.begin();

    while (iter != m.end()) {

        cout << iter->first << "-" << iter->second << endl;

        iter++;

    }

    //第二种遍历方式,for+迭代器

    for (iter = m.begin(); iter != m.end(); iter++) {

        cout << iter->first << "-" << iter->second << endl;

    }

    //第三种遍历方式,for+auto

    for (auto &it : m) {

        cout << it.first << "-" << it.second << endl;

    }

    return 0;

}

查找元素

#include <iostream>

#include <map>

using namespace std;

 

int main() {

    map<int, int> m;

    for (int i = 0; i < 5; i++) {

        m[i] = i * i;

    }

   

    auto it = m.find(3);

    if (it != m.end())

    {

        int ss = (*it).second;//或者int ss=it->second

        cout << ss << endl;

    }

    return 0;

}

删除元素

#include <iostream>

#include <map>

using namespace std;

 

int main() {

    map<int, int> m;

    for (int i = 0; i < 5; i++) {

        m[i] = i * i;

    }

    //删除键为bfff指向的元素

    m.erase(4);

    //删除迭代器 key所指向的元素

    map<int, int>::iterator key = m.find(2);

    if (key != m.end())

    {

        m.erase(key);

    }

    //删除所有元素

    m.erase(m.begin(), m.end());

    return 0;

}

统计key的出现的次数

#include <iostream>

#include <map>

using namespace std;

int main() {

    map<int, int> m;

    for (int i = 0; i < 5; i++) {

        m[i] = i * i;

    }

    int c = m.count(1);

    cout << c << endl;

    return 0;

}