当前位置:   article > 正文

【C++ STL】 --- map

【C++ STL】 --- map

1、map基本概念

简介:

map中所有元素都是pair

pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)

所有元素都会根据元素的键值自动排序

本质:

map/multimap属于关联式容器,底层结构是用二叉树实现。

优点:

可以根据key值快速找到value值

map和multimap区别:

map不允许容器中有重复key值元素

multimap允许容器中有重复key值元素

2、map的构造和赋值

功能描述:

对map容器进行构造和赋值操作

函数原型:

构造函数:

  1. map<T1, T2> mp; //map默认构造函数:
  2. map(const map &mp); //拷贝构造函数

赋值函数

map& operator=(const map &mp); //重载等号操作符
  1. void printMap(map<int,int>&m)
  2. {
  3. for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
  4. {
  5. cout << "key = " << it->first << " value = " << it->second << endl;
  6. }
  7. cout << endl;
  8. }
  9. void test01()
  10. {
  11. map<int,int>m; //默认构造
  12. m.insert(pair<int, int>(1, 10));
  13. m.insert(pair<int, int>(2, 20));
  14. m.insert(pair<int, int>(3, 30));
  15. printMap(m);
  16. map<int, int>m2(m); //拷贝构造
  17. printMap(m2);
  18. map<int, int>m3;
  19. m3 = m2; //赋值
  20. printMap(m3);
  21. }
  22. int main()
  23. {
  24. test01();
  25. return 0;
  26. }

总结:map中所有元素都是成对出现,插入数据时候要使用对组

3、map大小和交换

功能描述:
统计map容器大小以及交换map容器
函数原型:

  1. size(); //返回容器中元素的数目
  2. empty(); //判断容器是否为空
  3. swap(st); //交换两个集合容器
  1. void printMap(map<int,int>&m)
  2. {
  3. for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
  4. {
  5. cout << "key = " << it->first << " value = " << it->second << endl;
  6. }
  7. cout << endl;
  8. }
  9. void test01()
  10. {
  11. map<int, int>m;
  12. m.insert(pair<int, int>(1, 10));
  13. m.insert(pair<int, int>(2, 20));
  14. m.insert(pair<int, int>(3, 30));
  15. if (m.empty())
  16. {
  17. cout << "m为空" << endl;
  18. }
  19. else
  20. {
  21. cout << "m不为空" << endl;
  22. cout << "m的大小为: " << m.size() << endl;
  23. }
  24. }
  25. //交换
  26. void test02()
  27. {
  28. map<int, int>m;
  29. m.insert(pair<int, int>(1, 10));
  30. m.insert(pair<int, int>(2, 20));
  31. m.insert(pair<int, int>(3, 30));
  32. map<int, int>m2;
  33. m2.insert(pair<int, int>(4, 100));
  34. m2.insert(pair<int, int>(5, 200));
  35. m2.insert(pair<int, int>(6, 300));
  36. cout << "交换前" << endl;
  37. printMap(m);
  38. printMap(m2);
  39. cout << "交换后" << endl;
  40. m.swap(m2);
  41. printMap(m);
  42. printMap(m2);
  43. }
  44. int main()
  45. {
  46. test01();
  47. test02();
  48. return 0;
  49. }

总结:
统计大小 --- size
判断是否为空 --- empty
交换容器 --- swap

4、插入和删除

功能描述:
map容器进行插入数据和删除数据
函数原型:

  1. insert(elem); //在容器中插入元素。
  2. clear(); //清除所有元素
  3. erase(pos); //删除pos迭代器所指的元素,返回下一个元素的迭代器。
  4. erase(beg, end); //删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。
  5. erase(key); //删除容器中值为key的元素
  1. #include <map>
  2. void printMap(map<int,int>&m)
  3. {
  4. for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
  5. {
  6. cout << "key = " << it->first << " value = " << it->second << endl;
  7. }
  8. cout << endl;
  9. }
  10. void test01()
  11. {
  12. //插入
  13. map<int, int> m;
  14. //第一种插入方式
  15. m.insert(pair<int, int>(1, 10));
  16. //第二种插入方式
  17. m.insert(make_pair(2, 20));
  18. //第三种插入方式
  19. m.insert(map<int, int>::value_type(3, 30));
  20. //第四种插入方式
  21. m[4] = 40;
  22. printMap(m);
  23. //删除
  24. m.erase(m.begin());
  25. printMap(m);
  26. m.erase(3);
  27. printMap(m);
  28. //清空
  29. m.erase(m.begin(),m.end());
  30. m.clear();
  31. printMap(m);
  32. }
  33. int main()
  34. {
  35. test01();
  36. return 0;
  37. }

总结:

* map插入方式很多,记住其一即可

- 插入   --- insert 
- 删除   --- erase
- 清空   --- clear

5、map查找和统计

功能描述:
对map容器进行查找数据以及统计数据
函数原型:

  1. find(key); //查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
  2. count(key); //统计key的元素个数
  1. //查找和统计
  2. void test01()
  3. {
  4. map<int, int>m;
  5. m.insert(pair<int, int>(1, 10));
  6. m.insert(pair<int, int>(2, 20));
  7. m.insert(pair<int, int>(3, 30));
  8. //查找
  9. map<int, int>::iterator pos = m.find(3);
  10. if (pos != m.end())
  11. {
  12. cout << "找到了元素 key = " << (*pos).first << " value = " << (*pos).second << endl;
  13. }
  14. else
  15. {
  16. cout << "未找到元素" << endl;
  17. }
  18. //统计
  19. int num = m.count(3);
  20. cout << "num = " << num << endl;
  21. }
  22. int main()
  23. {
  24. test01();
  25. return 0;
  26. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/672523
推荐阅读
相关标签
  

闽ICP备14008679号