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

C++ map和set的使用

目录

0.前言

1.关联式容器

2.键值对

3.树形结构的关联式容器

3.1树形结构的特点

3.2树形结构在关联式容器中的应用

4.set

4.1概念与性质

4.2使用

5.multiset

5.1概念与性质

5.2使用

6.map

6.1概念与性质

6.2使用

7.multimap

7.1概念与性质

7.2使用

8.小结


(图像由AI生成) 

0.前言

在C++编程中,标准模板库(STL)提供了许多有用的容器,如vectorlistdequeforward_list等,这些容器被统称为序列式容器,因为它们底层是线性序列的数据结构,存储的是元素本身。然而,STL中还有一类非常重要的容器,它们通过键值对(key-value pairs)来组织数据,称为关联式容器。本文将介绍关联式容器中的setmultisetmapmultimap

1.关联式容器

关联式容器不同于序列式容器,它们通过键值对的形式来存储数据。关联式容器根据键(key)来快速检索对应的值(value)。与序列式容器存储元素本身不同,关联式容器更关注元素之间的关系,通常使用某种树形结构(如红黑树)来高效地管理数据。这类容器在插入、删除和查找操作上具有对数时间复杂度。

常见的关联式容器包括:

  • set:存储唯一元素的集合。
  • multiset:允许重复元素的集合。
  • map:存储键值对,键唯一。
  • multimap:存储键值对,键允许重复。

2.键值对

键值对是关联式容器的核心概念。一个键值对由两个部分组成:键(key)和值(value)。在关联式容器中,键用于唯一标识一个元素,值则是与该键关联的数据。键和值的这种关联关系使得我们可以通过键快速查找到对应的值。

setmultiset中,键和值是相同的,实际上只存储键,而没有单独的值。在这些容器中,每个元素即为键本身。

mapmultimap中,键和值是分开的。键用于唯一标识每个元素,而值是与键相关联的数据。例如,在一个map容器中,我们可以通过键查找对应的值,就像字典一样。

以下是键值对的一些特点和优势:

  1. 唯一性:在map中,每个键是唯一的,这保证了查找操作的准确性。而在multimap中,虽然允许键重复,但每个键值对仍然是唯一的。
  2. 快速查找:关联式容器通常通过某种平衡树结构(如红黑树)实现,能够在对数时间内完成查找操作。
  3. 自动排序:键值对按照键自动排序,这使得关联式容器不仅可以高效地进行查找,还可以方便地进行范围查询和遍历。

键值对的这种结构使得关联式容器在处理需要快速查找和排序的数据时非常有用。接下来,我们将详细介绍各个关联式容器的具体概念与使用方法。

3.树形结构的关联式容器

树形结构是实现关联式容器的核心技术之一。关联式容器通常使用平衡树(如红黑树)来管理内部数据。这种树形结构能够保持数据的有序性,同时保证插入、删除和查找操作的高效性。

3.1树形结构的特点

  1. 自动排序:树形结构中的元素按照键值自动排序,这使得容器内的数据始终保持有序。对于setmultiset,元素本身作为键进行排序;对于mapmultimap,元素按照键排序,值与键关联。

  2. 平衡性:平衡树通过自我调整,保持树的高度尽可能小,从而保证了操作的效率。红黑树是一种常见的平衡树,它在最坏情况下仍能保证对数时间复杂度的操作性能。

  3. 高效操作:由于树形结构的特性,插入、删除和查找操作的时间复杂度为O(log n),这是通过线性搜索无法达到的。

3.2树形结构在关联式容器中的应用

  • set和multiset:使用树形结构来存储唯一或允许重复的元素,并保持它们的有序性。
  • map和multimap:利用树形结构存储键值对,通过键来组织和查找数据,保证键的唯一性或允许重复键。

4.set

4.1概念与性质

  1. 有序存储set是按照一定次序存储元素的容器。在set中,元素始终保持有序。
  2. 唯一性:在set中,元素的值(value)也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
  3. 内部排序:在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。
  4. 访问速度set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
  5. 实现方式set在底层是用二叉搜索树(红黑树)实现的。

注意

  1. map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对。
  2. set中插入元素时,只需要插入value即可,不需要构造键值对。
  3. set中的元素不可以重复(因此可以使用set进行去重)。
  4. 使用set的迭代器遍历set中的元素,可以得到有序序列。
  5. set中的元素默认按照小于来比较。
  6. set中查找某个元素,时间复杂度为O(log n)。
  7. set中的元素不允许修改。这是因为修改元素会破坏set的有序性和唯一性。
  8. set的底层使用二叉搜索树(红黑树)来实现。

4.2使用

以下是一些示例代码,展示了set的主要功能:

插入和遍历元素

#include <iostream>
#include <set>int main() {std::set<int> mySet;// 插入元素mySet.insert(10);mySet.insert(5);mySet.insert(20);mySet.insert(10); // 重复元素,不会插入// 遍历元素for (const auto& elem : mySet) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}

查找元素

#include <iostream>
#include <set>int main() {std::set<int> mySet = {10, 5, 20};// 查找元素auto it = mySet.find(10);if (it != mySet.end()) {std::cout << "Found: " << *it << std::endl;} else {std::cout << "Not Found" << std::endl;}return 0;
}

删除元素

#include <iostream>
#include <set>int main() {std::set<int> mySet = {10, 5, 20};// 删除元素mySet.erase(10);// 遍历元素for (const auto& elem : mySet) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}

 使用自定义比较函数

#include <iostream>
#include <set>struct Compare {bool operator()(const int& a, const int& b) const {return a > b; // 降序排列}
};int main() {std::set<int, Compare> mySet = {10, 5, 20};// 遍历元素for (const auto& elem : mySet) {std::cout << elem << " ";}std::cout << std::endl;return 0;
}

5.multiset

5.1概念与性质

  1. 有序存储multiset是按照特定顺序存储元素的容器,其中元素是可以重复的。
  2. 元素识别:在multiset中,元素的值(value)也会识别它(因为multiset中本身存储的就是<value, value>组成的键值对,因此value本身就是key,key就是value,类型为T)。multiset元素的值不能在容器中进行修改(因为元素总是const的),但可以从容器中插入或删除。
  3. 排序规则:在内部,multiset中的元素总是按照其内部比较规则(类型比较)所指示的特定严格弱排序准则进行排序。
  4. 访问速度multiset容器通过key访问单个元素的速度通常比unordered_multiset容器慢,但当使用迭代器遍历时会得到一个有序序列。
  5. 底层实现multiset底层结构为二叉搜索树(红黑树)。

注意

  1. multiset在底层中存储的是<value, value>的键值对。
  2. multiset的插入接口中只需要插入value即可。
  3. set的区别是,multiset中的元素可以重复,而set中的value是唯一的。
  4. 使用迭代器对multiset中的元素进行遍历,可以得到有序的序列。
  5. multiset中的元素不能修改。
  6. multiset中查找某个元素的时间复杂度为O(log N)。
  7. multiset的作用是可以对元素进行排序。

5.2使用

以下是一个结合代码介绍multiset主要功能的示例:

#include <iostream>
#include <set>int main() {// 创建一个multiset容器std::multiset<int> myMultiset;// 插入元素myMultiset.insert(10);myMultiset.insert(20);myMultiset.insert(10); // 重复元素myMultiset.insert(15);myMultiset.insert(10); // 重复元素// 遍历multiset中的元素std::cout << "Elements in myMultiset:" << std::endl;for (const auto& elem : myMultiset) {std::cout << elem << " ";}std::cout << std::endl;// 查找某个元素auto it = myMultiset.find(10);if (it != myMultiset.end()) {std::cout << "Found element: " << *it << std::endl;} else {std::cout << "Element not found." << std::endl;}// 删除某个元素myMultiset.erase(10);// 遍历multiset中的元素std::cout << "Elements in myMultiset after erasing 10:" << std::endl;for (const auto& elem : myMultiset) {std::cout << elem << " ";}std::cout << std::endl;// 使用迭代器对multiset中的元素进行遍历,可以得到有序的序列std::cout << "Elements in myMultiset using iterator:" << std::endl;for (auto it = myMultiset.begin(); it != myMultiset.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

 输出结果:

Elements in myMultiset:
10 10 10 15 20
Found element: 10
Elements in myMultiset after erasing 10:
15 20
Elements in myMultiset using iterator:
15 20

代码说明

  1. 创建一个multiset容器,并插入一些元素,包括重复的元素。
  2. 使用范围for循环遍历并打印multiset中的所有元素。
  3. 查找并打印特定元素是否存在。
  4. 删除特定元素后再次遍历并打印multiset中的所有元素。
  5. 使用迭代器遍历并打印multiset中的所有元素,展示有序的序列。

6.map

6.1概念与性质

  1. 关联容器map是关联容器,它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。
  2. 键值对:在map中,键值key通常用于排序和唯一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,称为pair:
    typedef pair<const key, T> value_type;
  3. 排序:在内部,map中的元素总是按照键值key进行比较排序的。
  4. 访问速度map中通过键值访问单个元素的速度通常比unordered_map容器慢,但map允许根据顺序对元素进行直接迭代(即对map中的元素进行迭代时,可以得到一个有序的序列)。
  5. 下标访问符map支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
  6. 实现方式map通常被实现为二叉搜索树(更准确地说是平衡二叉搜索树(红黑树))。

6.2使用

以下是一个结合代码介绍map主要功能的示例:

#include <iostream>
#include <map>int main() {// 创建一个map容器std::map<int, std::string> myMap;// 插入元素myMap[1] = "one";myMap[2] = "two";myMap[3] = "three";// 遍历map中的元素std::cout << "Elements in myMap:" << std::endl;for (const auto& elem : myMap) {std::cout << elem.first << " => " << elem.second << std::endl;}// 查找某个元素auto it = myMap.find(2);if (it != myMap.end()) {std::cout << "Found element with key 2: " << it->second << std::endl;} else {std::cout << "Element with key 2 not found." << std::endl;}// 删除某个元素myMap.erase(2);// 遍历map中的元素std::cout << "Elements in myMap after erasing key 2:" << std::endl;for (const auto& elem : myMap) {std::cout << elem.first << " => " << elem.second << std::endl;}// 使用下标访问符修改元素myMap[1] = "ONE";std::cout << "Modified element with key 1: " << myMap[1] << std::endl;return 0;
}

输出结果:

Elements in myMap:
1 => one
2 => two
3 => three
Found element with key 2: two
Elements in myMap after erasing key 2:
1 => one
3 => three
Modified element with key 1: ONE

代码说明

  1. 创建map容器:创建一个map容器,用于存储int类型的键和std::string类型的值。
  2. 插入元素:使用下标操作符插入元素。
  3. 遍历元素:使用范围for循环遍历并打印map中的所有元素,展示键值对。
  4. 查找元素:使用find函数查找特定键的元素,并打印是否找到该元素。
  5. 删除元素:使用erase函数删除特定键的元素,并再次遍历打印剩余的元素。
  6. 修改元素:使用下标操作符修改特定键的值,并打印修改后的结果。

7.multimap

7.1概念与性质

  1. 关联式容器multimap是关联式容器,它按照特定的顺序存储由key和value映射成的键值对<key, value>,其中多个键值对之间的key是可以重复的。
  2. 键值对:在multimap中,键值对按照key排序和唯一地标识元素,而映射的value存储与key关联的内容。key和value的类型可能不同,通过multimap内部的成员类型value_type组合在一起,value_type是组合key和value的键值对:
    typedef pair<const Key, T> value_type;
  3. 排序规则:在内部,multimap中的元素总是通过其内部比较对象,按照指定的特定严格弱排序标准对key进行排序。
  4. 访问速度multimap通过key访问单个元素的速度通常比unordered_multimap容器慢,但是使用迭代器直接遍历multimap中的元素可以得到关于key有序的序列。
  5. 实现方式multimap在底层用二叉搜索树(红黑树)来实现。

注意multimapmap的唯一不同就是:map中的key是唯一的,而multimap中key是可以重复的。

7.2使用

以下是一个结合代码介绍multimap主要功能的示例:

#include <iostream>
#include <map>int main() {// 创建一个multimap容器std::multimap<int, std::string> myMultimap;// 插入元素myMultimap.insert({1, "one"});myMultimap.insert({2, "two"});myMultimap.insert({1, "uno"});  // 重复keymyMultimap.insert({3, "three"});// 遍历multimap中的元素std::cout << "Elements in myMultimap:" << std::endl;for (const auto& elem : myMultimap) {std::cout << elem.first << " => " << elem.second << std::endl;}// 查找某个元素auto it = myMultimap.find(1);if (it != myMultimap.end()) {std::cout << "Found element with key 1: " << it->second << std::endl;} else {std::cout << "Element with key 1 not found." << std::endl;}// 删除某个元素myMultimap.erase(2);// 遍历multimap中的元素std::cout << "Elements in myMultimap after erasing key 2:" << std::endl;for (const auto& elem : myMultimap) {std::cout << elem.first << " => " << elem.second << std::endl;}// 使用迭代器遍历multimap中的元素std::cout << "Elements in myMultimap using iterator:" << std::endl;for (auto it = myMultimap.begin(); it != myMultimap.end(); ++it) {std::cout << it->first << " => " << it->second << " ";}std::cout << std::endl;return 0;
}

输出结果:

Elements in myMultimap:
1 => one
1 => uno
2 => two
3 => three
Found element with key 1: one
Elements in myMultimap after erasing key 2:
1 => one
1 => uno
3 => three
Elements in myMultimap using iterator:
1 => one 1 => uno 3 => three

 代码说明

  1. 创建multimap容器:创建一个multimap容器,用于存储int类型的键和std::string类型的值。
  2. 插入元素:使用insert函数插入元素,包括重复的键。
  3. 遍历元素:使用范围for循环遍历并打印multimap中的所有元素,展示键值对。
  4. 查找元素:使用find函数查找特定键的元素,并打印是否找到该元素。
  5. 删除元素:使用erase函数删除特定键的元素,并再次遍历打印剩余的元素。
  6. 使用迭代器遍历元素:使用迭代器遍历并打印multimap中的所有元素,展示有序的序列。

注意

  1. multimap中的key是可以重复的。
  2. multimap中的元素默认将key按照小于来比较。
  3. multimap中没有重载operator[]操作,这是因为operator[]需要唯一的键来访问对应的值,而multimap中的键是可以重复的,无法保证唯一性。

8.小结

在C++中,关联式容器如setmultisetmapmultimap通过键值对来高效地管理和存储数据。这些容器利用平衡树结构(如红黑树)保证操作的有序性和高效性。setmultiset用于存储唯一和重复的有序元素,而mapmultimap则通过键值对实现键的唯一和重复存储。理解和使用这些容器可以帮助我们在编程中高效地处理各种复杂的数据结构和操作需求。

相关文章:

C++ map和set的使用

目录 0.前言 1.关联式容器 2.键值对 3.树形结构的关联式容器 3.1树形结构的特点 3.2树形结构在关联式容器中的应用 4.set 4.1概念与性质 4.2使用 5.multiset 5.1概念与性质 5.2使用 6.map 6.1概念与性质 6.2使用 7.multimap 7.1概念与性质 7.2使用 8.小结 &a…...

yarn的安装和配置以及更新总结,npm的对照使用差异

1. Yarn简介 Yarn 是一个由 Facebook 开发的现代 JavaScript 包管理器&#xff0c;旨在提供更快、更安全、更可靠的包管理体验。 1.1 什么是Yarn Yarn 是一个快速、可靠和安全的 JavaScript 包管理器&#xff0c;它通过并行化操作和智能缓存机制&#xff0c;显著提升了依赖安…...

【Git命令】git rebase之合并提交记录

使用场景 在本地提交了两个commit&#xff0c;但是发现根本没有没必要分为两次&#xff0c;需要想办法把两次提交合并成一个提交&#xff1b;这个时候可以使用如下命令启动交互式变基会话&#xff1a; git rebase -i HEAD~N这里 N 是你想要重新调整的最近的提交数。 如下在本地…...

为什么品牌需要做 IP 形象?

品牌做IP形象的原因有多方面&#xff0c;这些原因共同构成了IP形象在品牌建设中的重要性和价值&#xff0c;主要原因有以下几个方面&#xff1a; 增强品牌识别度与记忆点&#xff1a; IP形象作为品牌的视觉符号&#xff0c;具有独特性和辨识性&#xff0c;能够在消费者心中留…...

Kubernetes 1.24 版弃用 Dockershim 后如何迁移到 containerd 和 CRI-O

在本系列的上一篇文章中&#xff0c;我们讨论了什么是 CRI 和 OCI&#xff0c;Docker、containerd、CRI-O 之间的区别以及它们的架构等。最近&#xff0c;我们得知 Docker 即将从 kubernetes 中弃用&#xff01;&#xff08;查看 kubernetes 官方的这篇文章&#xff09;那么让我…...

70. 爬楼梯【 力扣(LeetCode) 】

一、题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 二、测试用例 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶…...

R语言优雅的把数据基线表(表一)导出到word

基线表&#xff08;Baseline Table&#xff09;是医学研究中常用的一种数据表格&#xff0c;用于在研究开始时呈现参与者的初始特征和状态。这些特征通常包括人口统计学数据、健康状况和疾病史、临床指标、实验室检测、生活方式、社会经济等。 本人在既往文章《scitb包1.6版本发…...

XMl基本操作

引言 使⽤Mybatis的注解⽅式&#xff0c;主要是来完成⼀些简单的增删改查功能. 如果需要实现复杂的SQL功能&#xff0c;建议使⽤XML来配置映射语句&#xff0c;也就是将SQL语句写在XML配置⽂件中. 之前&#xff0c;我们学习了&#xff0c;用注解的方式来实现MyBatis 接下来我们…...

Linux——Shell脚本和Nginx反向代理服务器

1. Linux中的shell脚本【了解】 1.1 什么是shell Shell是一个用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁 Shell 既是一种命令语言&#xff0c;有是一种程序设计语言 Shell是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问…...

pyspark使用 graphframes创建和查询图的方法

1、安装graphframes的步骤 1.1 查看 spark 和 scala版本 在终端输入&#xff1a; spark-shell --version 查看spark 和scala版本 1.2 在maven库中下载对应版本的graphframes https://mvnrepository.com/artifact/graphframes/graphframes 我这里需要的是spark 2.4 scala 2.…...

【web】-flask-简单的计算题(不简单)

打开页面是这样的 初步思路&#xff0c;打开F12&#xff0c;查看头&#xff0c;都发现了这个表达式的base64加密字符串。编写脚本提交答案&#xff0c;发现不对&#xff1b; 无奈点开source发现源代码&#xff0c;是flask,初始化表达式&#xff0c;获取提交的表达式&#xff0…...

Apache Sqoop

Apache Sqoop是一个开源工具&#xff0c;用于在Apache Hadoop和关系型数据库&#xff08;如MySQL、Oracle、PostgreSQL等&#xff09;之间进行数据的批量传输。其主要功能包括&#xff1a; 1. 数据导入&#xff1a;从关系型数据库&#xff08;如MySQL、Oracle等&#xff09;中将…...

【Python】TensorFlow介绍与实战

TensorFlow介绍与使用 1. 前言 在人工智能领域的快速发展中&#xff0c;深度学习框架的选择至关重要。TensorFlow 以其灵活性和强大的社区支持&#xff0c;成为了许多研究者和开发者的首选。本文将进一步扩展对 TensorFlow 的介绍&#xff0c;包括其优势、应用场景以及在最新…...

第100+16步 ChatGPT学习:R实现Xgboost分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现Xgboost分类 &#xff08…...

【操作系统】定时器(Timer)的实现

这里写目录标题 定时器一、定时器是什么二、标准库中的定时器三、实现定时器 定时器 一、定时器是什么 定时器也是软件开发中的⼀个重要组件.类似于⼀个"闹钟".达到⼀个设定的时间之后,就执行某个指定 好的代码. 定时器是⼀种实际开发中⾮常常用的组件. ⽐如⽹络通…...

鸿蒙Navigation路由能力汇总

基本使用步骤&#xff1a; 1、新增配置文件router_map&#xff1a; 2、在moudle.json5中添加刚才新增的router_map配置&#xff1a; 3、使用方法&#xff1a; 属性汇总&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-compone…...

​1:1公有云能力整体输出,腾讯云“七剑”下云端

【全球云观察 &#xff5c; 科技热点关注】 曾几何时&#xff0c;云计算技术的兴起&#xff0c;为千行万业的数字化创新带来了诸多新机遇&#xff0c;同时也催生了新产业新业态新模式&#xff0c;激发出高质量发展的科技新动能。很显然&#xff0c;如今的云创新已成为高质量发…...

【iOS】APP仿写——网易云音乐

网易云音乐 启动页发现定时器控制轮播图UIButtonConfiguration 发现换头像 我的总结 启动页 这里我的启动页是使用Xcode自带的启动功能&#xff0c;将图片放置在LaunchScreen中即可。这里也可以通过定时器控制&#xff0c;来实现启动的效果 效果图&#xff1a; 这里放一篇大…...

react 快速入门思维导图

在掌握了react中一下的几个步骤和语法&#xff0c;基本上就可以熟练的使用react了。 1、组件的使用。react创建组件主要是类组件和函数式组件&#xff0c;类组件有生命周期&#xff0c;而函数式组件没有。 2、jsx语法。react主要使用jsx语法&#xff0c;需要使用babel和webpa…...

微软研究人员为电子表格应用开发了专用人工智能LLM

微软的 Copilot 生成式人工智能助手现已成为该公司许多软件应用程序的一部分。其中包括 Excel 电子表格应用程序&#xff0c;用户可以在其中输入文本提示来帮助处理某些选项。微软的一组研究人员一直在研究一种新的人工智能大型语言模型&#xff0c;这种模型是专门为 Excel、Go…...

[算法题]两个链表的第一个公共结点

题目链接: 两个链表的第一个公共结点 图示: 两个链表如果长度一致, 那么两人同时一人走一步, 如果存在公共结点, 迟早会相遇, 但是如果长度不一致单存在公共结点, 两人同时一人走一步不会相遇, 此时定义两个变量, node1 和 node2, 这两个变量分别从 x1 和 x2 开始走, 当其走完…...

MySQL事务管理(上)

目录 前言 CURD不加控制&#xff0c;会有什么问题&#xff1f; CURD满足什么属性&#xff0c;能解决上述问题&#xff1f; 事务 什么是事务&#xff1f; 为什么会出现事务 事务的版本支持 事务提交方式 查看事务提交方式 改变 MySQL 的自动提交模式: 事务常见操作方式 前…...

HTML2048小游戏

源代码在效果图后面 效果图 源代码 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>2048 Game&l…...

为 android编译 luajit库、 交叉编译

时间&#xff1a;20200719 本机环境&#xff1a;iMac2017 macOS11.4 参考: 官方的文档&#xff1a;Use the NDK with other build systems 写在前边&#xff1a;交叉编译跟普通编译类似&#xff0c;无非是利用特殊的编译器、链接器生成动态或静态库; make 本质上是按照 Make…...

【音视频】音频重采样

文章目录 前言音频重采样的基本概念音频重采样的原因1. 设备兼容性2. 文件大小和带宽3. 音质优化4. 标准化和规范5. 多媒体同步6. 降低处理负载重采样的注意事项 总结 前言 音频重采样是指将音频文件的采样率转换成另一种采样率的过程。这在音频处理和传输中是一个常见且重要的…...

卷积神经网络学习问题总结

问题一&#xff1a; 深度学习中的损失函数和应用场景 回归任务&#xff1a; 均方误差函数&#xff08;MSE&#xff09;适用于回归任务&#xff0c;如预测房价、预测股票价格等。 import torch.nn as nn loss_fn nn.MSELoss() 分类任务&#xff1a; 交叉熵损失函数&…...

嵌入式面试总结

C语言中struct和union的区别 struct和union都是常见的复合结构。 结构体和联合体虽然都是由多个不同的数据类型成员组成的&#xff0c;但不同之处在于联合体中所有成员共用一块地址空间&#xff0c;即联合体只存放了一个被选中的成员&#xff0c;结构体中所有成员占用空间是累…...

超简单安装指定版本的clickhouse

超简单安装指定版本的clickhouse 命令执行shell脚本 idea连接 命令执行 参考官网 # 下载脚本 wget https://raw.githubusercontent.com/183461750/doc-record/d988dced891d70b23c153a3bbfecee67902a3757/middleware/data/clickhouse/clickhouse-install.sh # 执行安装脚本(中…...

FlowUs横向对比几款笔记应用的优势所在

FlowUs作为一个本土化的生产力工具&#xff0c;在中国市场的环境下相对于Notion有其独特的优势&#xff0c;尤其是在稳定性和模板适应性方面。 尽管Notion在笔记和生产力工具领域享有极高的声誉&#xff0c;拥有着诸多创新功能和强大的生态系统&#xff0c;但它并不一定适合每…...

收银系统源码-千呼新零售收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…...

批发网站建设/合肥做网络推广的公司

三星发布Galaxy Note 10.1平板之前曾经推出过一款采用5.3英寸屏幕的Galaxy Note手机&#xff0c;现在它的升级版采用5.5英寸屏幕的Galaxy Note 2也已经问世有几个月的时间了&#xff0c;那么自从Galaxy Note这条产品线诞生之日起它就超越了自家的Galaxy S系列手机产品线&#x…...

网站开发学习班/要怎么网络做推广

概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理&#xff0c;使其成为不可读的一段代码&#xff0c;通常称为“密文”&#xff0c;使其只能在输入相应的密钥之后才能显示出本来内容&#xff0c;通过这样的途径来达到保护数据不被非法人窃取、阅读的目…...

一个网站如何做推广/seo优化入门教程

从MySQL5.6开始&#xff0c;mysqlbinlog支持将远程服务器上的binlog实时复制到本地服务器上。mysqlbinlog的实时二进制复制功能并非简单的将远程服务器的日志复制过来&#xff0c;它是通过MySQL 5.6公布的Replication API实时获取二进制事件。本质上&#xff0c;就相当于MySQL的…...

@wordpress/百度提交入口网址是什么

在XML中需要插入自己的字符串&#xff0c;但是发现&<>"这些字符无法替换掉&#xff0c;使用正常的Replace没有效果&#xff0c;网上也没有找到合适的。并且由于是控制台程序&#xff0c;无法引用NET类&#xff0c;经过查询MSDN得到些启发&#xff0c;写下这个转…...

网站建设电销异议处理话术/优化关键词快速排名

齐博提取出来的 判断是否为手机浏览器的函数index的代码为if($IsMob){header("location:wapindex.php");exit;}common.inc.php 里面关于$IsMob的定义为$IsMobis_mobile();function.inc.php 中提取函数//检查是否为手机访问function is_mobile(){$regex_match"/(…...

wordpress分类排序号/全自动推广软件

被调合约(通过call回调)支持接收以太币的案例: 被调合约(通过call回调)支持接收以太币的案例:pragma solidity >0.4.0 <0.6.0;contract Test001 {// 这个合约会保留所有发送给它的以太币&#xff0c;没有办法返还。// 必须实现Fallback回退函数&#xff0c;才能支持cal…...