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

C++STL剖析(九)—— unordered_map和unordered_multimap的概念和使用

文章目录

  • 1. unordered_map的介绍和使用
    • 🍑 unordered_map的构造
    • 🍑 unordered_map的使用
      • 🍅 insert
      • 🍅 operator[ ]
      • 🍅 find
      • 🍅 erase
      • 🍅 size
      • 🍅 empty
      • 🍅 clear
      • 🍅 swap
      • 🍅 count
  • 2. unordered_multimap的介绍和使用
    • 🍑 unordered_multimap的使用
      • 🍅 find
      • 🍅 count


1. unordered_map的介绍和使用

unordered_map 的介绍:

  • unordered_map 是存储 <key, value> 键值对的关联式容器,其允许通过keys快速的索引到与其对应的 value。
  • 在 unordered_map 中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。
  • 在内部,unordered_map 没有对 <kye, value> 按照任何特定的顺序排序,为了能在常数范围内找到 key 所对应的 value,unordered_map 将相同哈希值的键值对放在相同的桶中。
  • unordered_map 容器通过 key 访问单个元素要比 map 快,但它通常在遍历元素子集的范围迭代方面效率较低。
  • unordered_map 实现了直接访问操作符(operator[]),它允许使用 key 作为参数直接访问 value。
  • 它的迭代器至少是前向迭代器。

🍑 unordered_map的构造

构造一个 unordered_map 容器对象,根据使用的构造函数版本初始化其内容,我们主要掌握 3 种方式即可:

在这里插入图片描述

(1)构造一个某个类型的空容器

unordered_map<string, int> um1; // 构造一个key为string类型,value为int类型的空容器

(2)拷贝构造某类型容器

unordered_map<string, int> um1({ {"apple", 1}, {"lemon", 2}});
unordered_map<string, int> um2(um1); // 拷贝构造同类型容器um1的复制品

(3)使用迭代器区间进行初始化构造

构造一个 unordered_map 对象,其中包含范围 [first,last) 中每个元素的副本。

unordered_map<string, int> um1({ {"apple", 1}, {"lemon", 2}});
unordered_map<string, int> um3(um1.begin(), um1.end()); // 使用迭代器拷贝构造um1容器某段区间的复制品

🍑 unordered_map的使用

unordered_map 的成员函数主要分为:迭代器,容量操作,修改操作。

在这里插入图片描述

我这里只列举几个常用的,其它的可以看 文档 学习。

🍅 insert

在 unordered_map 中插入新元素。

只有当每个元素的键不等同于容器中已经存在的任何其他元素的键时,才会插入它,也就是说 unordered_map 中的键是唯一的。

在这里插入图片描述

(1)构造匿名对象插入

void test_unordered()
{// 构造对象unordered_map<string, double> um({ {"apple", 1.0}, {"lemon", 2.0} });// 构造匿名对象插入新元素um.insert(pair<string, double>("milk", 2.0));um.insert(pair<string, double>("eggs", 6.5));um.insert(pair<string, double>("sugar", 0.8));// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

(2)调用 make_pair 函数模板插入

void test_unordered()
{// 构造对象unordered_map<string, double> um({ {"apple", 1.0}, {"lemon", 2.0} });// 调用make_pair函数模板插入新元素um.insert(make_pair("milk", 2.0));um.insert(make_pair("eggs", 6.5));um.insert(make_pair("sugar", 0.8));// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

(3)初始化列表插入

void test_unordered()
{// 构造对象unordered_map<string, double> um({ {"apple", 1.0}, {"lemon", 2.0} });// 初始化列表插入新元素um.insert({ "sugar", 0.8 });um.insert({ "eggs", 6.5 });um.insert({ "salt", 0.1 } );// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

🍅 operator[ ]

如果 k 与容器中元素的键匹配,则函数返回对其映射值的引用。

如果 k 与容器中任何元素的键不匹配,该函数将插入一个具有该键的新元素,并返回对其映射值的引用。

注意:这总是将容器大小增加 1,即使没有为元素分配映射值(使用默认构造函数构造元素)。

在这里插入图片描述

(1)利用 [] 运算符重载函数进行插入

void test_unordered()
{// 构造对象unordered_map<string, double> um;// 利用[]运算符重载函数进行插入um["apple"] = 1.5;um["lemon"] = 2.0;um["sugar"] = 0.8;// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

(2)利用 [] 运算符重载函数进行修改

void test_unordered()
{// 构造对象unordered_map<string, double> um;// 利用[]运算符重载函数进行插入um["apple"] = 1.5;um["lemon"] = 2.0;um["sugar"] = 0.8;// 利用[]运算符重载函数修改valueum["apple"] = 8.88;// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

总结:

  • 若当前容器中已有键值为 key 的键值对,则返回该键值对 value 的引用。
  • 若当前容器中没有键值为 key 的键值对,则先插入键值对 <key, value()>,然后再返回该键值对中 value 的引用。

🍅 find

在容器中搜索以 k 为键的元素,如果找到它,就返回一个迭代器,否则就返回 unordered_map::end(容器末端之前的元素)的迭代器。

在这里插入图片描述

代码示例

void test_unordered()
{// 构造对象unordered_map<string, double> um;// 利用[]运算符重载函数进行插入um["mom"] = 5.4;um["dad"] = 6.1;um["bro"] = 5.9;// 查找"dad"auto pos = um.find("dad");if (pos != um.end()){cout << pos->first << " is " << pos->second;}else{cout << "not found" << endl;}
}

运行结果

在这里插入图片描述

🍅 erase

从 unordered_map 容器中移除单个元素或一组元素([first,last))。

通过调用每个元素的析构函数,这有效地减少了容器的大小。

在这里插入图片描述

(1)从容器中删除单个元素(直接传要删除的元素)

void test_unordered()
{// 构造对象unordered_map<string, string> um;// 填充容器um["U.S."] = "Washington";um["U.K."] = "London";um["France"] = "Paris";um["Russia"] = "Moscow";um["China"] = "Beijing";um["Germany"] = "Berlin";um["Japan"] = "Tokyo";// 直接删除"Japan"um.erase("Japan");// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}}

运行结果

在这里插入图片描述

(2)从容器中删除单个元素(搭配 find 使用)

void test_unordered()
{// 构造对象unordered_map<string, string> um;// 填充容器um["U.S."] = "Washington";um["U.K."] = "London";um["France"] = "Paris";um["Russia"] = "Moscow";um["China"] = "Beijing";um["Germany"] = "Berlin";um["Japan"] = "Tokyo";// 查找"Russia"的位置auto pos = um.find("Russia");if (pos != um.end()){um.erase(pos);cout << "delete success" << endl;}else{cout << "not found" << endl;}
}

运行结果

在这里插入图片描述

(3)从容器中删除一组元素(搭配 find 使用)

void test_unordered()
{// 构造对象unordered_map<string, string> um;// 填充容器um["U.S."] = "Washington";um["U.K."] = "London";um["France"] = "Paris";um["Russia"] = "Moscow";um["China"] = "Beijing";um["Germany"] = "Berlin";um["Japan"] = "Tokyo";// 查找"France"的位置auto pos = um.find("France");// 删除从"France"开始后面所有的元素um.erase(pos, um.end());// 遍历for (auto e : um){cout << e.first << ": " << e.second << endl;}
}

运行结果

在这里插入图片描述

🍅 size

返回 unordered_map 容器中的元素数量。

在这里插入图片描述

代码示例

void test_unordered()
{// 构造对象unordered_map<string, double> um = { {"milk", 2.30}, {"potatoes", 1.90}, {"eggs", 0.40} };cout << "size: " << um.size() << endl;// 插入重复元素um["milk"] = 5.80;cout << "size: " << um.size() << endl;
}

运行结果

在这里插入图片描述

🍅 empty

返回一个 bool 值,指示 unordered_map 容器是否为空,即其大小是否为 0。

这个函数不会以任何方式修改容器的内容。

在这里插入图片描述

代码示例

void test_unordered()
{unordered_map<int, int> um1; // 构造空容器unordered_map<int, int> um2 = { {1,10},{2,20},{3,30} }; // 构造非空容器// um1是空容器,所以结果为真cout << "um1 " << (um1.empty() ? "is empty" : "is not empty") << endl;// um2不是空容器,所以结果为假cout << "um2 " << (um2.empty() ? "is empty" : "is not empty") << endl;
}

运行结果

在这里插入图片描述

🍅 clear

unordered_map 容器中的所有元素都将被删除,会去调用它们的析构函数,并将它们从容器中移除,使容器的大小为 0。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化容器unordered_map<string, string> um1 = {{"house","maison"},{"car","voiture"},{"grapefruit","pamplemousse"}};// 清空容器um1.clear();// 重新插入数据um1["hello"] = "bonjour";um1["sun"] = "soleil";// 遍历for (auto& x : um1){cout << x.first << "=" << x.second << endl;}
}

运行结果

在这里插入图片描述

🍅 swap

通过 ump 的内容交换容器的内容,ump 是另一个包含相同类型元素的 unordered_map 对象,大小可能不同。

这个函数在容器之间交换指向数据的内部指针,而不实际对单个元素执行任何复制或移动,允许常量时间执行,无论大小如何。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化um1和um2容器unordered_map<string, string>um1 = { {"Star Wars","G"},{"Alien","R"} },um2 = { {"Inception","C"},{"Donnie Darko","R"} };// 交换两个容器的内容um1.swap(um2);// 遍历um1cout << "um1: ";for (auto& x : um1){cout << x.first << "-" << x.second << ", ";}cout << endl;// 遍历um2cout << "um2: ";for (auto& x : um2){cout << x.first << "-" << x.second << ", ";}
}

运行结果

在这里插入图片描述

🍅 count

在容器中搜索键为 k 的元素,并返回找到的元素数。

因为 unordered_map 容器不允许重复键,这意味着如果容器中存在具有该键的元素,则函数实际返回 1,否则返回 0。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化容器unordered_map<string, double> um = { {"Burger",2.99}, {"Fries",1.99}, {"Soda",1.50} };// 在um中查找下列的数据for (auto& x : { "Burger","Pizza","Salad","Soda" }) {if (um.count(x) > 0)std::cout << "um has " << x << std::endl;elsestd::cout << "um has no " << x << std::endl;}
}

运行结果

在这里插入图片描述

2. unordered_multimap的介绍和使用

unordered_multimap 的介绍:

  • multimap 是一种关联容器,它存储由键值和映射值组合而成的元素,很像 unordered_map 容器,但是允许不同的元素具有等价的键。
  • 在 unordered_multimap 中,键值通常用于唯一标识元素,而映射值是一个对象,其内容与该键相关联。键和映射值的类型可能不同。
  • 在内部,unordered_multimap 中的元素不会根据它们的键值或映射值以任何特定的顺序进行排序,而是根据它们的散列值将它们组织到 bucket中,以允许直接通过键值快速访问单个元素(平均时间复杂度恒定)。
  • 具有等效键的元素被分组在同一个 bucket 中,并且迭代器可以遍历所有这些元素。
  • 容器中的迭代器至少是前向迭代器。

注意,这个容器不是在它自己的头文件中定义的,而是与 unordered_map 共享头文件 <unordered_map>

🍑 unordered_multimap的使用

unordered_multimap 容器与 unordered_map 容器的底层数据结构是一样的,都是哈希表。

其次,它们所提供的成员函数的接口都是基本一致的,这两种容器唯一的区别就是,unordered_multimap 容器允许键值冗余,即 unordered_multimap 容器当中存储的键值对的 key 值是可以重复的。

其次,由于 unordered_multimap 容器允许键值对的键值冗余,调用 [] 运算符重载函数时,应该返回键值为 key 的哪一个键值对的 value 的引用存在歧义,因此在 unordered_multimap 容器当中没有实现 [] 运算符重载函数。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化容器unordered_multimap<int, string> umm;// 插入键值对,允许重复umm.insert(make_pair(2023, "跑步"));umm.insert({ 2023, "打球" });umm.insert({ 2023,"玩游戏" });// 遍历ummfor (auto x : umm){cout << x.first << ": " << x.second << endl;}
}

可以看到,key 是可以重复的。

在这里插入图片描述

另外,它和 unordered_map 容器所提供的成员函数的接口都是基本一致的,所以就不全部列举了,只列举几个稍微有点小差别的函数接口。

🍅 find

在容器中搜索以 key 为键的元素,如果找到,则返回该元素的迭代器,否则返回 unordered_multimap::end(超出容器末端的元素)的迭代器。

也就是返回底层哈希表中第一个找到的键值为 key 的键值对的迭代器。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化容器unordered_multimap<string, string> umm;// 插入键值对,允许重复umm.insert({ "mom", "妈妈" });umm.insert({ "mom", "母亲" });umm.insert({ "dad", "父亲" });umm.insert({ "bro", "兄弟" });// 查找第一个"mom"的key,并输出对应的valuecout << "one of the values for 'mom' is: ";cout << umm.find("mom")->second;
}

运行结果

在这里插入图片描述

🍅 count

在容器中搜索键为 k 的元素,并返回找到的元素个数。

在这里插入图片描述

代码示例

void test_unordered()
{// 初始化容器unordered_multimap<string, string> umm = {{"orange","FL"},{"strawberry","LA"},{"strawberry","OK"},{"pumpkin","NH"} };// 统计下面三个单词在容器中出现的次数for (auto& x : { "orange","lemon","strawberry" }) {cout << x << ": " << umm.count(x) << " 次" << endl;}
}

运行结果

在这里插入图片描述

相关文章:

C++STL剖析(九)—— unordered_map和unordered_multimap的概念和使用

文章目录1. unordered_map的介绍和使用&#x1f351; unordered_map的构造&#x1f351; unordered_map的使用&#x1f345; insert&#x1f345; operator[ ]&#x1f345; find&#x1f345; erase&#x1f345; size&#x1f345; empty&#x1f345; clear&#x1f345; sw…...

Android无菜单键,如何触发onCreateOptionsMenu(Menu menu)

文章目录小结问题及解决无法触发onCreateOptionsMenu(Menu menu)修改配置文件解决使用一个按钮来触发其它办法参考小结 现在的Android有三个键&#xff1a; 任务键&#xff0c;Home键&#xff0c;返回键&#xff0c;也就是没有菜单键了&#xff0c;那么如何如何触发onCreateOp…...

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机&#xff0c;我们可以从中探索它们的特征。&#xff08;图片来源&#xff1a;网络&#xff09;我们完全有理由怀疑生命在我们的宇宙中很常见&#xff0c;但是为什么我们从未发现过其他生命存在的迹象&#xff1f;这个问题几乎自现代天文学诞…...

计算机网络入门

一&#xff0c;计算机网络在信息时代中的作用 21世纪的一些重要特征就是数字化&#xff0c;网络化和信息化&#xff0c;它是一个以网络为核心的信息时代。有三类大家很熟悉的网络&#xff0c;即电信网络&#xff0c;有线电视网络和计算机网络。按照最初的服务分工&#xff0c;…...

网络安全-内网DNS劫持-ettercap

网络安全-内网DNS劫持-ettercap 前言 一&#xff0c;我也是初学者记录的笔记 二&#xff0c;可能有错误的地方&#xff0c;请谨慎 三&#xff0c;欢迎各路大神指教 四&#xff0c;任何文章仅作为学习使用 五&#xff0c;学习网络安全知识请勿适用于违法行为 学习网络安全知识请…...

synchronized和Lock的区别

synchronized和lock的区别 synchronized和Lock&#xff0c;我已经通过源码级别的介绍过了&#xff0c;下面我们来总结下他们的区别 区别&#xff1a; 1.synchronized是关键字,Lock是接口&#xff0c;synchronized是JVM层实现&#xff0c;Lock是JDK中JUC包下的实现&#xff1b;…...

SpringBoot 指标监控 Actuator

Spring Boot Actuator为 Micrometer 提供了依赖管理和自动配置&#xff0c;Micrometer是一个支持 众多监控系统 的应用程序指标接口 该功能与&#xff1a;java\jdk\bin 下的 Jconsole 功能雷同 1、pom文件中引入依赖&#xff08;使用的springboot是2.7.2&#xff09; <dep…...

面试浅谈之十大排序算法

面试浅谈之十大排序算法 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是面试浅谈系列&#xff0c;收录在专栏面试中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列将记录一些阿呆个人整理的面试题 &#x1f3c3;&…...

LeetCode-1250. 检查「好数组」【数论,裴蜀定理】

LeetCode-1250. 检查「好数组」【数论&#xff0c;裴蜀定理】题目描述&#xff1a;解题思路一&#xff1a;裴蜀定理是&#xff1a;a*xb*y1。其中a,b是数组中的数&#xff0c;x,y是任意整数。如果a,b互质那么一定有解。问题即转换为寻找互质的数。解题思路二&#xff1a;简化代码…...

【Linux】NTP时间同步服务与NFS网络文件共享存储服务器(配置、测试)

一、NTP时间同步服务1、NTP介绍NTP服务器【Network Time Protocol&#xff08;NTP&#xff09;】是用来使计算机时间同步化的一种协议&#xff0c;它可以使计机对其服务器或时钟源&#xff08;如石英钟&#xff0c;GPS等等)做同步化&#xff0c;它可以提供高精准度的时间校正&a…...

windows下php连接oracle安装oci8扩展报错(PHP Startup: Unable to load dynamic library ‘oci8_11g‘)

记录一下php7.29安装oci8的艰苦过程&#xff0c;简直就是唐僧西天取经历经九九八十一难。 使用的是phpstudy_pro安装的ph扩展wnmp环境下&#xff1b; 1 、安装oralce Instant Client 首先&#xff0c;安装oci8和pdo_oci扩展依赖的Oracle client。了解到需要连接的Oracle版…...

TensorRT的功能

TensorRT的功能 文章目录TensorRT的功能2.1. C and Python APIs2.2. The Programming Model2.2.2. The Runtime Phase2.3. Plugins2.4. Types and Precision2.5. Quantization2.6. Tensors and Data Formats2.7. Dynamic Shapes2.8. DLA2.9. Updating Weights2.10. trtexec本章…...

433MHz无线通信--模块RXB90

1、接收模块RXB90简介 两个数据输出是联通的。 2、自定义一个编码解码规则 组数据为“0x88 0x03 0xBD 0xB6”。 3、发射模块 如何使用示波器得到捕捉一个周期的图像&#xff1f; 通过date引脚连接示波器CH1&#xff0c;以及示波器探针的接地端接芯片的GND&#xff0c;分…...

Seata源码学习(三)-2PC核心源码解读

Seata源码分析-2PC核心源码解读 2PC提交源码流程 上节课我们分析到了GlobalTransactionalInterceptor全局事务拦截器&#xff0c;一旦执行拦截器&#xff0c;我们就会进入到其中的invoke方法&#xff0c;在这其中会做一些GlobalTransactional注解的判断&#xff0c;如果有注解…...

IO流概述

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 目录IO流概述IO 流的分类总结流的四大类字…...

【node.js】node.js的安装和配置

文章目录前言下载和安装Path环境变量测试推荐插件总结前言 Node.js是一个在服务器端可以解析和执行JavaScript代码的运行环境&#xff0c;也可以说是一个运行时平台&#xff0c;仍然使用JavaScript作为开发语言&#xff0c;但是提供了一些功能性的API。 下载和安装 Node.js的官…...

Python优化算法—遗传算法

Python优化算法—遗传算法一、前言二、安装三、遗传算法3.1 自定义函数3.2 遗传算法进行整数规划3.3 遗传算法用于旅行商问题3.4 使用遗传算法进行曲线拟合一、前言 优化算法&#xff0c;尤其是启发式的仿生智能算法在最近很火&#xff0c;它适用于解决管理学&#xff0c;运筹…...

数据埋点(Data buried point)的应用价值剖析

一、什么是数据埋点&#xff1f;数据埋点指在应用中特定的流程中收集一些信息&#xff0c;用来跟踪应用使用的状况&#xff0c;后续用来进一步优化产品或是提供运营的数据支撑。比如访问数&#xff08;Visits&#xff09;&#xff0c;访客数(Visitor&#xff09;&#xff0c;停…...

一文弄懂硬链接、软链接、复制的区别

复制 命令&#xff1a;cp file1 file2 作用&#xff1a;实现对file1的一个拷贝。 限制&#xff1a;可以跨分区&#xff0c;文件夹有效。 效果&#xff1a;修改file1&#xff0c;对file2无影响&#xff1b;修改file2&#xff0c;对file1无影响。删除file1&#xff0c;对file…...

界面组件Telerik ThemeBuilder R1 2023开创应用主题研发新方式!

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库&#xff0c;加快开发速度。Telerik DevCraft提供最完整的工具箱&#xff0c;用于构建现代和面向未来的业务应用程序&#xff0c;目前提供UI for ASP.NET包含一个完…...

在FederatedScope 如何查看clientserver之间的传递的参数大小(通讯量)? 对源码的探索记录

在FederatedScope 如何查看client/server之间的传递的参数大小&#xff08;通讯量&#xff09;&#xff1f; 对源码的探索记录 背景需求 想给自己的论文补一个通讯开销对比实验&#xff1a;需要计算出client和server之间传递的信息(例如&#xff0c;模型权重、embedding)总共…...

2023爱分析 · 数据科学与机器学习平台厂商全景报告 | 爱分析报告

报告编委 黄勇 爱分析合伙人&首席分析师 孟晨静 爱分析分析师 目录 1. 研究范围定义 2. 厂商全景地图 3. 市场分析与厂商评估 4. 入选厂商列表 1. 研究范围定义 研究范围 经济新常态下&#xff0c;如何对海量数据进行分析挖掘以支撑敏捷决策、适应市场的快…...

20230215_数据库过程_高质量发展

高质量发展 —一、运营结果 SQL_STRING:‘delete shzc.np_rec_lnpdb a where exists (select * from tbcs.v_np_rec_lnpdbbcv t where a.telnumt.telnum and a.outcarriert.OUTCARRIER and a.incarriert.INCARRIER and a.owncarriert.OWNCARRIER and a.starttimet.STARTTIME …...

【百度 JavaScript API v3.0】LocalSearch 位置检索、Autocomplete 结果提示

地名检索移动到指定坐标 需求 在输入框中搜索&#xff0c;在下拉列表中浮动&#xff0c;右侧出现高亮的列表集。选中之后移动到指定坐标。 技术点 官网地址&#xff1a; JavaScript API - 快速入门 | 百度地图API SDK 开发文档&#xff1a;百度地图JSAPI 3.0类参考 实现 …...

运用Facebook投放,如何制定有效的竞价策略?

广告投放中&#xff0c;我们经常会遇到一个问题&#xff0c;就是不知道什么样的广告适合自己的业务。其实&#xff0c;最简单的方法就是根据我们业务本身进行定位并进行投放。当你了解了广告主所处行业及目标受众后&#xff0c;接下来会针对目标市场进行搜索和定位&#xff08;…...

大数据框架之Hadoop:HDFS(五)NameNode和SecondaryNameNode(面试开发重点)

5.1NN和2NN工作机制 5.1.1思考&#xff1a;NameNode中的元数据是存储在哪里的&#xff1f; 首先&#xff0c;我们做个假设&#xff0c;如果存储在NameNode节点的磁盘中&#xff0c;因为经常需要进行随机访问&#xff0c;还有响应客户请求&#xff0c;必然是效率过低。因此&am…...

计算机网络 - 1. 体系结构

目录概念、功能、组成、分类概念功能组成分类分层结构概念总结OSI 七层模型应用层表示层会话层传输层网络层数据链路层物理层TCP/IP 四层模型OSI 与 TCP/IP 相同点OSI 与 TCP/IP 不同点为什么 TCP/IP 去除了表示层和会话层五层参考模型概念、功能、组成、分类 概念 &#x1f…...

银行业上云进行时,OLAP 云服务如何解决传统数仓之痛?

本文节选自《中国金融科技发展概览&#xff1a;创新与应用前沿》&#xff0c;从某国有大行构建大数据云平台的实践出发&#xff0c;解读了 OLAP 云服务如何助力银行实现技术平台化、组件化和云服务化&#xff0c;降低技术应用门槛&#xff0c;赋能业务创新。此外&#xff0c;本…...

特定领域知识图谱融合方案:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】

特定领域知识图谱融合方案:文本匹配算法之预训练模型SimBert、ERNIE-Gram 文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语…...

【2023最新教程】从0到1开发自动化测试框架(0基础也能看懂)

一、序言 随着项目版本的快速迭代、APP测试有以下几个特点&#xff1a; 首先&#xff0c;功能点多且细&#xff0c;测试工作量大&#xff0c;容易遗漏&#xff1b;其次&#xff0c;代码模块常改动&#xff0c;回归测试很频繁&#xff0c;测试重复低效&#xff1b;最后&#x…...

做网站做域名/百度推广信息流有用吗

有时候我们需要在游戏或应用中用一些符合我们样式的提示框(AlertDialog) 以下是我在开发一个小游戏中总结出来的.希望对大家有用. 先上效果图: 下面是用到的背景图或按钮的图片 经过查找资料和参考了一下例子后才知道,要实现这种效果很简单.就是在设置alertDialog的contentV…...

茂名模板建站定制/商丘seo外包

选择Java程序员并不像看起来那样容易。 毕竟&#xff0c;有太多可用的选项。 但是&#xff0c;什么让杰出的程序员与一般的程序员不同呢&#xff1f; 这是一个很难令人满意地回答的问题。 公司如何为项目选择合适的Java程序员&#xff1f; 任何招聘经理在寻找新人才时都应遵循…...

wordpress调用访问次数/百度上如何做优化网站

题目描述 思路 设数列F(n)F(n−1)F(n−2),n>2.F(n)F(n-1)F(n-2),n>2.F(n)F(n−1)F(n−2),n>2. 对应除以3后的余数为G(n).G(n).G(n). 那么&#xff0c;G(n)G(n−1)G(n−2)3.G(n)\frac{G(n-1)G(n-2)}{3}.G(n)3G(n−1)G(n−2)​.很容易想到在0<n<1090<n<10^…...

西宁专业做网站/网站seo文章

...

硅云买域名做网站/网络广告代理

http://levi.cg.am/?p2987 服务器环境&#xff1a;CentOS – 5.4php升级&#xff1a;5.4.14 &#xff0d; 5.5.0升级心得&#xff1a;比较顺利&#xff0c;但是有一点需要说明&#xff1a;eaccelerator无法兼容php5.5.0&#xff0c;好在php在5.5.0默认提供了Zend OPcache&…...

泉州制作网站公司/宣传软文是什么

//求解一元多次方程&#xff0c;注意到"the interest rate will be no less than 0 and no larger than 1."//所以方程的输出是随着the value of i 严格增加&#xff0c;故可以采用二分查找方程的解#include<iostream>#include<stdio.h>#include<math…...