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

C++ unordered_map基础概念、对象创建、赋值操作、大小操作、数据插入、数据删除、数据修改、代码练习 1 2

set和map的区别:set的元素是一个数据,map则是两个元素(一个pair)

unordered_map<type1, type2> 无序映射,是按第一个哈希键来进行检索的。

线性容器:vector、string、list

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

线性模拟树:priority_queue

散列容器:unordered_set、unordered_map

unordered_map 对象创建,代码见下:

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_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 默认构造函数unordered_map<int, int> m1;cout << "m1: ";printUMap(m1);// 2 初始化列表unordered_map<int, int> m2_1 = {pair<int, int>(1, 10),pair<int, int>(5, 13),pair<int, int>(2, 12),pair<int, int>(4, 19),};cout << "m2_1: ";printUMap(m2_1);unordered_map<int, int> m2_2 ({pair<int, int>(1, 10),pair<int, int>(5, 13),pair<int, int>(2, 12),pair<int, int>(4, 19),});cout << "m2_2: ";printUMap(m2_2);// 3 迭代器unordered_map<int, int> m3(m2_1.begin(), m2_1.end());cout << "m3: ";printUMap(m3);// 4 拷贝构造unordered_map<int, int> m4(m2_2);cout << "m4: ";printUMap(m4);return 0;
}

unordered_map 赋值操作,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {// 2 初始化列表unordered_map<int, int> m1 = {pair<int, int>(1, 10),pair<int, int>(5, 13),pair<int, int>(2, 12),pair<int, int>(4, 19),};cout << "m1: ";printUMap(m1);// 1 = 对象unordered_map<int, int> m2;m2 = m1;cout << "m2: ";printUMap(m2);return 0;
}

unordered_map 大小操作,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;cout << "empty: " << m.empty() << endl;cout << "size: " << m.size() << endl;m = {pair<int, int>(1, 10),pair<int, int>(5, 13),pair<int, int>(2, 12),pair<int, int>(4, 19),};cout << "empty: " << m.empty() << endl;cout << "size: " << m.size() << endl;return 0;
}

unordered_map 数据插入,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;// 1 m.insert(pair<int, int>(2, 45));printUMap(m);// 2 m.insert(make_pair(4, 56)); // 函数重载printUMap(m);// 3m.insert(unordered_map<int, int>::value_type(5, 78));printUMap(m);// 4m[88] = 6; // 运算符重载printUMap(m);// 5pair<unordered_map<int, int>::iterator, int> ret = m.insert(make_pair(4, 19));cout << "insert: " << ret.second; // 这里的话,如果是已有的key,就会显示插入失败// 6m[5] = 55; // 这种方式的话,就可以直接修改,也会存在下面的第七种情况,第七种方式便不是太好了// 7m[0];printUMap(m);return 0;
}

unordered_map 数据查找,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;m[1] = 45;m[3] = 23;m[6] = 55;m[2] = 90;for (int i = 0; i <= 4; ++i) {unordered_map<int, int>::iterator it = m.find(i);if (it != m.end()) {cout << "找到键值对:" << it->first << endl;}else {cout << "未找到键值对" << endl;}}return 0;
}

unordered_map 数据删除,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;m[1] = 45;m[3] = 23;m[6] = 55;m[2] = 90;// 1m.erase(2);printUMap(m);// 2 迭代器m.erase(m.begin());printUMap(m);// 3 m.erase(m.begin(), m.end());printUMap(m);// 4m[8] = 55;m[7] = 90;printUMap(m);m.clear();printUMap(m);return 0;
}

unordered_map 数据修改,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;m[1] = 45;m[3] = 23;m[6] = 55;m[2] = 90;printUMap(m);m[3] = 33;printUMap(m);m[2]++;printUMap(m);return 0;
}

unordered_map 数据统计,代码见下

#include<iostream>
#include<unordered_map>using namespace std;void printUMap(const unordered_map<int, int>& m) {for (unordered_map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {cout << "key = " << it->first << " " << "value = " << it->second << endl;}cout << "---------------------------" << endl;
}int main() {unordered_map<int, int> m;m[1] = 45;m[3] = 23;m[6] = 55;m[2] = 90;for (int i = 0; i <= 3; ++i) {cout << i << "出现次数为:" << m.count(i) << endl;}unordered_multimap<int, int> mm = {pair<int, int>(3, 4),pair<int, int>(3, 7),pair<int, int>(2, 3),pair<int, int>(1, 9),};for (int i = 0; i <= 3; ++i) {cout << i << "出现次数为:" << mm.count(i) << endl;}return 0;
}

代码练习 1 对应力扣,四数相加,代码见下

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> hash;for(int i=0; i<nums1.size(); ++i){for(int j=0; j<nums2.size(); ++j){hash[-(nums1[i] + nums2[j])]++;}}int ans = 0;for(int k=0; k<nums3.size(); ++k){for(int l=0; l<nums4.size(); ++l){ans += hash[nums3[k] + nums4[l]];}}return ans;}
};

代码练习 2 对应力扣和为k的子数组,代码见下

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> cnt;int ans = 0;int pre = 0;cnt[pre]++;for(int i=0; i<nums.size(); ++i){pre = pre + nums[i];ans += cnt[pre - k];cnt[pre]++;}return ans;}
};

相关文章:

  • 面试150 加油站
  • 【已解决】 数据库INSERT操作时,Column count doesn’t match value count at row 1
  • Bytemd@Bytemd/react详解(编辑器实现基础AST、插件、跨框架)
  • 算法导论第二十五章 深度学习的伦理与社会影响
  • leetcode51.N皇后:回溯算法与冲突检测的核心逻辑
  • python案例练习
  • LLMs基础学习(八)强化学习专题(5)
  • 常见的软件测试模型有哪些?各自的特点是什么?
  • Python嵌套循环
  • CSS 实现滚动吸附效果
  • 使用css做出折叠导航栏的功能
  • 基于Python Websockets的客户端程序,能够连接服务端、处理ping/pong、发送订阅请求并保持长连接
  • Openwrt基本初始化(安装中文包,磁盘扩容)
  • Python环境搭建竞赛
  • Unity高性能无GC图表
  • 顶顶通AI呼叫软件(大模型电话机器人)介绍
  • 如何卸载幂果画报
  • 【系统分析师】2018年真题:论文及解题思路
  • 仕么是GAN网络和原理和架构
  • 分库分表下的 ID 冲突问题与雪花算法讲解
  • 金湖网站推广/东莞疫情最新消息今天新增
  • 做网站的图片要多少像素/seo 推广教程
  • 什么网站做跨境电子商务/站内免费推广有哪些
  • 免费seo网站诊断/百度推广一年大概需要多少钱
  • 受欢迎的免费建站/石家庄关键词优化平台
  • 工程造价信息期刊/免费seo培训