Day19 C++STL入门基础知识十一——map、multimap容器 构造赋值、大小交换、插入删除、查找统计、排序【全面深度剖析+例题代码展示】
创始人
2024-05-23 18:09:53

💃🏼 本人简介:男
👶🏼 年龄:18
✍每日一句:【道固远,笃行可至;事虽巨,坚为必成】

文章目录

  • 1. 基本概念
  • 2. 构造赋值
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 3. 大小交换
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 4. 插入删除
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 5. 查找统计
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 6. 排序
    • ① 函数原型
    • ② 代码展示
    • ③ 测试结果
  • 最后,感谢大家支持u (^ _ ^)

1. 基本概念

  • 所有元素都是两个两个出现的pair
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值),通过key值找到value值
  • 按键值自动排序
  • multimap可以插入重复的key值

2. 构造赋值

① 函数原型

  • map m; 默认构造
  • map(const map &m); 拷贝构造

② 代码展示

#include
#include
#include
using namespace std;void printMap(const map m) {for (map::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << (*it).first << " value = " << it->second << endl;  //}   cout << endl;
}//构造、赋值
void text01() {//默认构造map m;m.insert(pair(3, 10));m.insert(pair(2, 20));m.insert(pair(4, 30));m.insert(pair(1, 40));m.insert(pair(1, 50));printMap(m);	//自动按照key值由小到大排序//拷贝构造map m2(m);printMap(m2);//赋值操作map m3;m3 = m2;printMap(m3);
}int main() {text01();return 0;
}

③ 测试结果

在这里插入图片描述

3. 大小交换

① 函数原型

  • size(); 返回容器元素数目
  • empty(); 判空
  • swap(st); 交换两个集合容器

② 代码展示

#include
#include
#include
using namespace std;void printMap(const map m) {for (map::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << (*it).first << " value = " << it->second << endl;  //}   cout << endl;//cout << "------------------------------------------------------" << endl;
}//大小、交换
void text02() {map m1;m1.insert(pair(1, 10));m1.insert(pair(2, 15));m1.insert(pair(3, 25));m1.insert(pair(4, 30));cout << "m1容器大小为: " << m1.size() << endl;if (m1.empty()) cout << "m容器为空" << endl;else cout << "m1容器不为空" << endl;map m2;m2.insert(pair(5, 40));m2.insert(pair(4, 50));m2.insert(pair(8, 60));m2.insert(pair(6, 70));cout << "交换前: " << endl;cout << "m1为: " << endl;  printMap(m1); cout << "m2为: " << endl; printMap(m2);m1.swap(m2);cout << "交换后: " << endl;cout << "m1为: " << endl; printMap(m1); cout << "m2为: " << endl;  printMap(m2);
}
int main(){text02();return 0;
}

③ 测试结果

在这里插入图片描述

4. 插入删除

① 函数原型

  • insert(elem); 插入元素
  • clear(); 清空
  • erase(pos); 删除迭代器所指的元素,并返回下一个迭代器
  • erase(beg, end); 删除区间[beg, end)的所有元素,返回下一个元素的迭代器
  • erase(key); 删除容器中值为key的元素

② 代码展示

#include
#include
#include
using namespace std;void printMap(const map m) {for (map::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << (*it).first << " value = " << it->second << endl;  //}   cout << endl;//cout << "------------------------------------------------------" << endl;
}void text03() {map m;//插入//第一种pair()m.insert(pair(1, 10));m.insert(pair(2, 20));m.insert(pair(3, 30));m.insert(pair(4, 40));//第二种make_pairm.insert(make_pair(5, 50));//第三种::value_typem.insert(map::value_type(6, 60));//第四种[]m[7] = 70;printMap(m);//删除m.erase(3);  //删除为key元素的值printMap(m);m.erase(++ m.begin() , m.end());printMap(m);m.clear();printMap(m);
}
int main(){text03();return 0;
}

③ 测试结果

5. 查找统计

① 函数原型

  • find(key); 查找key是否存在
    • 若存在,则返回元素的迭代器
    • 不存在,返回map.end();
  • count(key); 统计key的个数

② 代码展示

#include
#include
#include
using namespace std;void printMap(const map m) {for (map::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << (*it).first << " value = " << it->second << endl;  //}   cout << endl;//cout << "------------------------------------------------------" << endl;
}void text04() {map m;m.insert(make_pair(1, 10));m.insert(make_pair(2, 20));m.insert(make_pair(3, 30));m.insert(make_pair(4, 40));m.insert(make_pair(4, 40));m.insert(make_pair(4, 40));//查找map::iterator pos = m.find(3);if (pos != m.end()) cout << "查找到了" << endl;else cout << "未查找到" << endl;//统计int cnt = m.count(4);cout <<"key为4的个数为:" << cnt << endl;  //不允许插入重复key
}

③ 测试结果

在这里插入图片描述

6. 排序

① 函数原型

② 代码展示

#include
#include
#include
using namespace std;class cmp {
public:bool operator()(int x, int y)const{return x > y;}//从大到小排
};void text05() {map m;m.insert(make_pair(1, 10));m.insert(make_pair(4, 40));m.insert(make_pair(3, 30));m.insert(make_pair(2, 20));for (map::iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << (*it).first << " value = " << it->second << endl;}
}

③ 测试结果

在这里插入图片描述

最后,感谢大家支持u (^ _ ^)

如果感觉这篇文章对你有帮助的话,不妨三连支持下,十分感谢(✪ω✪)。

printf("点个赞吧*^*");
cout << "收藏一下叭o_o";
System.out.println("评论一下吧^_^");
print("关注一下叭0-0")

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...