当前位置: 首页 > backend >正文

C++ map基础概念、map对象创建、map赋值操作、map大小操作、map数据插入、map数据删除、map数据修改、map数据统计

map的使用频率很高,仅次于vector,先了解下pair的概念:

pair 概念:

template<class _Ty1, class Ty2>

struct pair{

       _Ty1 first; // 这两个可以是任意的类型

       _Ty2 second;

};

eg:pair<int, int> p(13, 14)

        pair<int, int> p = make_pair(13, 14);

map特点:

1 容器中所有元素都是pair,first不重复

2 pair中的第一个元素都是key(键),第二个元素是value(值)

3 所有元素都会根据元素的key值排序

multimap特点:

1 容器中所有元素都是pair,first可以重复

2 pair中的第一个元素都是key(键),第二个元素是value(值)

3 所有元素都会根据元素的key值排序

容器特点:

线性容器:vector、string、list

树形容器:set、multiset、map、multimap

代码见下,助理解

#include<iostream>
#include<map>
#include<vector>using namespace std;int main() {pair<int, int> p1;p1.first = 13;p1.second = 14;cout << p1.first << p1.second << endl;pair<int, string> p2(2, "333");cout << p2.first << p2.second << endl;pair<char, int> p3 = make_pair(52, 0);cout << p3.first << p3.second << endl;map<int, int> m;return 0;
}

map对象创建,有常用的几种方式,见以下代码

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {// 1 默认构造函数map<int, int> m1;cout << "ml: " << endl;printMap(m1);// 2 初始化列表map<int, int> m2_1 = {pair<int, int>(1, 10),pair<int, int>(4, 45),pair<int, int>(6, 13),pair<int, int>(5, 50)};cout << "m2_1:" << endl;printMap(m2_1);map<int, int> m2_2 ({pair<int, int>(1, 10),pair<int, int>(4, 45),pair<int, int>(6, 13),pair<int, int>(5, 50)});cout << "m2_2: " << endl;printMap(m2_2);// 3 迭代器map<int, int> m3(m2_1.begin(), m2_1.end());cout << "m3: " << endl;printMap(m3);// 4 拷贝构造map<int, int> m4(m3);cout << "m4: " << endl;printMap(m4);return 0;
}

map赋值操作,代码见下

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m = {pair<int, int>(1, 10),pair<int, int>(4, 12),pair<int, int>(2, 30),pair<int, int>(5, 19),};cout << "m: " << endl;printMap(m);// 1 = 赋值map<int, int> m1;m1 = m;printMap(m1);// 2 = 赋值列表map<int, int> m2;m2 = {pair<int, int>(1, 15),pair<int, int>(4, 14),pair<int, int>(2, 35),pair<int, int>(5, 15),};printMap(m2);// return 0;
}

map大小操作,代码见下

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m1;cout << m1.empty() << endl;cout << m1.size() << endl;map<int, int> m2 = { pair<int, int>(1, 10), pair<int, int>(4, 15) };cout << m2.empty() << endl;cout << m2.size() << endl;return 0;
}

map数据插入,代码见下:

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m;// 1m.insert(pair<int, int>(1, 10));printMap(m);// 2m.insert(make_pair(2, 56));printMap(m);// 3m.insert(map<int, int>::value_type(5, 45));printMap(m);// 4m[6] = 8;printMap(m);// 5pair< map<int, int>::iterator, bool> ret = m.insert(make_pair(2, 21)); // 这里直接插入失败,只要有已有的key值,就会插入失败cout << ret.second << endl;printMap(m);// 6m[2] = 48; printMap(m); // 这里修改成功,这里却不一样,是可以修改的,这就是两种插入方式的差别// 7m[0];printMap(m); // 这里是没有的key值,也会创建了一个新的值return 0;
}

map插入,代码见下

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m = {pair<int, int>(1, 4),pair<int, int>(3, 14),pair<int, int>(2, 42),pair<int, int>(4, 49),};for (int i = 4; i <= 5; ++i) {map<int, int>::iterator it = m.find(i);if (it != m.end()) {cout << "找到键值对:(" << it->first << "," << it->second << ")" << endl;}else {cout << "未找到键值:" << i << endl;}}return 0;
}

map数据删除,代码见下

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m = {pair<int, int>(1, 4),pair<int, int>(3, 14),pair<int, int>(2, 42),pair<int, int>(4, 49),};printMap(m);// 值删除m.erase(1);printMap(m);// 迭代器删除m.erase(m.begin());printMap(m);// 迭代器区间删除m.erase(m.begin(), m.end());printMap(m);return 0;
}

map数据修改,代码见下:

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m;m.insert(make_pair(1, 10));m.insert(make_pair(5, 15));m.insert(make_pair(2, 45));m[2] = 1314;printMap(m);m[5]++;printMap(m);return 0;m[2] -= 20;printMap(m);
}

map数据统计,代码见下:

#include<iostream>
#include<map>
#include<vector>using namespace std;void printMap(const map<int, int>& m) {for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "-------------------------" << endl;
}
int main() {map<int, int> m = {pair<int, int>(1, 4),pair<int, int>(3, 45),pair<int, int>(4, 55),pair<int, int>(8, 49),};for (int i = -1; i < 9; ++i) {cout << i << "出现次数为:" << m.count(i) << endl;}multimap<int, int> mm = {pair<int, int>(1, 4),pair<int, int>(1, 4),pair<int, int>(1, 4),pair<int, int>(1, 4),pair<int, int>(3, 45),pair<int, int>(3, 45),pair<int, int>(3, 45),pair<int, int>(3, 45),pair<int, int>(4, 55),pair<int, int>(4, 55),pair<int, int>(4, 55),pair<int, int>(8, 49),pair<int, int>(8, 49)};for (int i = -1; i < 9; ++i) {cout << i << "出现次数为:" << mm.count(i) << endl;}return 0;
}

http://www.xdnf.cn/news/12993.html

相关文章:

  • zotero及其插件安装
  • Java中的泛型底层是怎样的
  • 【八股消消乐】构建微服务架构体系—服务注册与发现
  • 线性规划饮食问题求解:FastAPI作为服务端+libhv作为客户端实现
  • Boost ASIO 库深入学习(1)
  • CSRF(跨站请求伪造)详解
  • 《经济学原理》第九版 第九章国际贸易
  • 01Linux基础入门教程——从起源到核心概念
  • MySQL的日志
  • 深入理解Python内置模块及第三方库的使用与管理
  • Global Security Markets International Compliance知识点总结
  • 用 DeepSeek 创作一首属于自己的歌
  • HBM 读的那些事
  • Spring通用类型转换的实现原理
  • LangChain4j 1.x 核心源码剖析-基础篇
  • CMake基础:gcc/g++编译选项详解
  • 【GO性能优化】第十五章:性能优化艺术——揭秘Go程序的性能调优技巧
  • Redis : Hash形式
  • 【threejs】每天一个小案例讲解:题外话篇
  • 算法训练第十一天
  • Python应用变量与数据类型
  • 直角坐标系和斜角坐标系
  • 《PyTorch深度学习入门》
  • 深入剖析JVM垃圾回收,高并发场景JVM性能调优,内存泄露分析,以及如何避免OOM
  • Git 常见操作
  • 【PCIe总线】-- inbound、outbound配置
  • 小游戏不能玩了?最好用flash扩展程序
  • Deep-Live-Cam电脑部署避坑大全:环境搭建、常见错误排查与终极修复方案
  • Transceiver线速率配置
  • Redis实战-消息队列篇