[C++随想录] map和set的使用

news2024/7/30 19:29:25

map和set的使用

  • set
    • 初始化
    • find
    • erase
    • count
    • lower_bound && upper_bound
    • equal_ range
  • map
    • insert
    • [ ]运算符
  • multiset && multimap

set — — key模拟
map — — key_value模型

set

初始化

void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);

	cout << "s-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;

	set<int>s1(s.begin(), s.end());

	cout << "s1-> ";
	set<int>::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
}

int main()
{

	set_test1();

	return 0;
}

运行结果:

s-> 5 9 10 12 13
s1-> 5 9 10 12 13
  1. set默认 去重 + 排序
  2. 支持 遍历, 但不支持 随机访问, 即[], 迭代器是 双向迭代器👇👇👇

find

void set_test2()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);

	auto it = s.find(10);
	if(it != s.end())
		cout << *it << endl;
	auto tem = s.find(5);
	if(tem != s.end())
		cout << *tem << endl;
}

int main()
{

	set_test2();

	return 0;
}

运行结果:

5
  • 算法库里面的 find — — 暴力搜索, O(N)
    set自带的 find — — 利用二叉搜索树的特性 O(logN)
void set_test2()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);

	// set自带的find函数
	auto it = s.find(5);
	if(it != s.end())
		cout << *it << endl;

	// 算法库里面的 find函数
	auto tem = find(s.begin(), s.end(), 5);
	if(tem != s.end())
		cout << *tem << endl;
}

int main()
{

	set_test2();

	return 0;
}

运行结果:

5
5

erase

  1. 先找后删
    🗨️思考: 下面的代码正确不?
void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);
	
	auto it = s.begin();
	s.erase(it);
	s.erase(it + 3);
}

int main()
{
	set_test1();
	
	return 0;
}
  • 上面的代码是错误的:
    1. set没有重载 +
    2. 即使重载了 +, 我们也要 判断 我们要删除的地址是否在s中

我们应该这样写👇👇👇

void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);

	cout << "s-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;

	auto it = s.find(10);
	// 判断 s 中是否有此元素
	if (it != s.end())
	{
		s.erase(it);
	}

	cout << "删除后-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test1();

	return 0;
}

运行结果:

s-> 5 9 10 12 13
删除后-> 5 9 12 13
  1. 传值直接删
void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);

	cout << "s-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// 传值直接删除
	s.erase(10);

	cout << "删除后-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test1();

	return 0;
}

运行结果:

s-> 5 9 10 12 13
删除后-> 5 9 12 13

🗨️传值直接删除, 不用判断元素在不在set对象中?

  • 不用!
    如果在对象中, 就删除; 如果不在对象中, 啥事不干👇👇👇
void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);

	cout << "s-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// 传值直接删除
	s.erase(15);

	cout << "删除后-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test1();

	return 0;
}

运行结果:

s-> 5 9 10 12 13
删除后-> 5 9 10 12 13
  1. 删除一段区间
void set_test1()
{
	set<int>s;
	s.insert(10);
	s.insert(12);
	s.insert(13);
	s.insert(9);
	s.insert(10);
	s.insert(5);

	cout << "s-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// 删除 [5, 10)区间内的值
	auto i = s.find(5);
	auto j = s.find(10);
	s.erase(i, j);

	cout << "删除后-> ";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test1();

	return 0;
}

运行结果:

s-> 5 9 10 12 13
删除后-> 10 12 13
  • 这个我感觉很 鸡肋:
    1. set不支持 +
    2. 找到了还要判断是否存在

从而导致, 用这个方法删除一段区间有点麻烦.
不过, 后面有两个函数: lower_bound 和 upper_bound, 可以配合使用找寻 一段区间, 可以配合这个方法使用~~

count

在 set中, 判断一个元素存不存在:

  1. find
  2. count


count函数返回 该元素的个数, 由于set 去重 所以, 返回 1 或 0
count函数 在 multiset 里面可以体现出 统计元素个数的功能

  1. 判段元素在不在
void set_test3()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);

	// count 和 find 来判断元素是否存在
	int tem = s.count(5);
	if (tem > 0)
	{
		cout << "5元素存在" << endl;
	}
	else
	{
		cout << "5元素不存在" << endl;
	}

	auto it = s.find(11);
	if (it != s.end())
	{
		cout << "11元素存在" << endl;
	}
	else
	{
		cout << "11元素不存在" << endl;
	}
}

int main()
{

	set_test3();

	return 0;
}

运行结果:

5元素存在
11元素不存在
  1. 统计元素个数
void set_test3()
{
	multiset<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);
	s.insert(15);
	s.insert(15);
	
	int n = s.count(15);
	cout << "15的个数: " << n << endl;

}

int main()
{

	set_test3();

	return 0;
}

运行结果:

15的个数: 3
  • multiset 和 set
    1. set中的 key是唯一的, 而multiset中的 key 允许是多个的
    2. set 和 multiset 都是包含在 <set>的头文件中的

lower_bound && upper_bound

void set_test3()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);
	s.insert(10);
	s.insert(11);
	
	// lower_bound && upper_bound
	auto itlow = s.lower_bound(5);
	cout << *itlow << endl;

	auto itup = s.upper_bound(15);
	cout << *itup << endl;

}

int main()
{

	set_test3();

	return 0;
}

运行结果:

5
18

itlow 和 itup构成的区间是 [itlow, itup) ⇒ 这样我们就可以 删除特定区间的内容👇👇👇

void set_test3()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);
	s.insert(10);
	s.insert(11);

	cout << "s ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// 删除 5~15 这段区间的内容
	auto itlow = s.lower_bound(5);
	auto itup = s.upper_bound(15);

	s.erase(itlow, itup);
	cout << "删除 5~15 ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test3();

	return 0;
}

运行结果:

s ->1 5 10 11 12 15 18
删除 5~15 ->1 18

equal_ range

  • pair :
    在C++中,std::pair是一个模板类,用于保存两个元素的有序对。std::pair的成员变量 first和second分别表示有序对中的第一个和第二个元素。你可以使用 点号(.)操作符来访问这些成员

如果对象里面 存在val, 那么正常返回; 如果对象里面 不存在val, 那么就 返回一个不存在的区间

void set_test3()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(1);
	s.insert(10);
	s.insert(11);

	cout << "s ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	cout << "equal_range(5) val存在的情况" << endl;
	auto eit1 = s.equal_range(5);
	cout << "first element-> " << *eit1.first << endl;
	cout << "second element-> " << *eit1.second << endl;

	cout << "equal_range(6) val不存在的情况" << endl;
	auto eit2 = s.equal_range(6);
	cout << "first element-> " << *eit2.first << endl;
	cout << "second element-> " << *eit2.second << endl;

}

int main()
{

	set_test3();

	return 0;
}

运行结果:

equal_range(5) val存在的情况
first element-> 5
second element-> 10
equal_range(6) val不存在的情况
first element-> 10
second element-> 10

假设: set中, 值等于value的下标为i;
其实, set 使用 equal_range 最多只能返回 [i, i+1)
multiset 使用 equal_range 可以返回 [i, i+1, i+2, ... ... j)

set

void set_test3()
{
	set<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(5);
	s.insert(5);
	s.insert(5);
	s.insert(1);
	s.insert(10);
	s.insert(11);

	cout << "s ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// set 删除所有等于5的值
	auto eit = s.equal_range(5);
	s.erase(eit.first, eit.second);
	cout << "set删除所有等于5的值 ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test3();

	return 0;
}

运行结果:

s ->1 5 10 11 12 15 18
set删除所有等于5的值 ->1 10 11 12 15 18

multiset

void set_test3()
{
	multiset<int> s;
	s.insert(15);
	s.insert(18);
	s.insert(12);
	s.insert(5);
	s.insert(5);
	s.insert(5);
	s.insert(5);
	s.insert(1);
	s.insert(10);
	s.insert(11);

	cout << "s ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	
	// set 删除所有等于5的值
	auto eit = s.equal_range(5);
	s.erase(eit.first, eit.second);
	cout << "multiset删除所有等于5的值 ->";
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

int main()
{

	set_test3();

	return 0;
}

运行结果:

s ->1 5 5 5 5 10 11 12 15 18
multiset删除所有等于5的值 ->1 10 11 12 15 18

map

insert

void map_test1()
{
	map<string, string> m1;

	// C++98
	// 1. 传一个pair对象
	pair<string, string> kv1("insert", "插入");
	m1.insert(kv1);

	// 2. 传一个pair的匿名对象
	m1.insert(pair < string, string>("sort", "排序"));

	// 3. make_pair
	m1.insert(make_pair("love", "爱情"));

	// C++11
	// 4. 多参数的构造函数支持隐式类型转换, 用{}
	m1.insert({ "insert", "xxx" });

	for (auto e : m1)
	{
		cout << e.first  << "-> " << e.second << endl;
	}
	cout << endl;

	// 区间初始化
	map<string, string> m2(m1.begin(), m1.end());
	map<string, string>::iterator it = m2.begin();
	while (it != m2.end())
	{
		// cout << (*it).first << "-> "(*it).second << endl;
		cout << it->first << "-> " << it->second << endl;
		++it;
	}
	cout << endl;

}

int main()
{
	map_test1();

	return 0;
}

运行结果:

insert-> 插入
love-> 爱情
sort-> 排序

insert-> 插入
love-> 爱情
sort-> 排序
  1. map的 insert, 传的是一个 pair结构, 返回的也是一个 pair结构.

  2. map的 insert, 是根据 key来进行判断的: 如果 key形同, value不同, 就 不会覆盖

  3. map的 insert, 几种传参方式:

    1. C++98
      1. 传一个pair对象
      2. 传一个pair的匿名对象
      3. 用 make_pair来创建一个pair对象
    2. C++11
      4. 支持多参数的隐式类型转换, 用 {}
  4. map的迭代器也是 双向迭代器, 而不是随机迭代器. map虽然重载了[ ], 但跟我们平常的不大一样, 下面会讲的

[ ]运算符


一般的[ ] 是返回 存储对象的, 比如: vector 就返回 int, list 就返回 string;
但是 map中的 [ ], 不是返回 pair结构, 而是返回 pair结构中的 第二个元素的.

我们细看一下 [ ] 的不同:

[ ]的本质是 调用 insert, 通过 key 来返回 value:

  1. 当key不存在时, 会插入该键的新元素, 并返回value的引用
  2. 当key存在时, 会返回value的引用

⇒ [ ]有两大功能 插入 + 修改

[ ] 的本质是调用 insert, 但是有所不同

  1. insert中, key相同, value不同的键值对是 不会覆盖的
  2. [ ]中, 会返回value的引用, 所以能对value就行修改 ⇒ key相同, value不同的键值对是可以 覆盖的
void map_test1()
{
	map<string, string> m1;

	// C++98
	// 1. 传一个pair对象
	pair<string, string> kv1("insert", "插入");
	m1.insert(kv1);

	// 2. 传一个pair的匿名对象
	m1.insert(pair < string, string>("sort", "排序"));

	// 3. make_pair
	m1.insert(make_pair("love", "爱情"));

	// C++11
	// 4. 多参数的构造函数支持隐式类型转换, 用{}
	m1.insert({ "insert", "xxx" });

	for (auto e : m1)
	{
		cout << e.first  << "-> " << e.second << endl;
	}
	cout << endl;

	// 插入
	m1["muyu"];
	cout << "[]: 插入(muyu)" << endl;
	for (auto e : m1)
	{
		cout << e.first << "-> " << e.second << endl;
	}
	cout << endl;

	// 修改(覆盖)
	m1["insert"] = "xxx";
	cout << "[]: 修改(insert)" << endl;
	for (auto e : m1)
	{
		cout << e.first << "-> " << e.second << endl;
	}
	cout << endl;

	// 插入 + 修改
	m1["mutong"] = "沐潼";
	cout << "[]: 插入 + 修改(<mutong, 沐潼>)" << endl;
	for (auto e : m1)
	{
		cout << e.first << "-> " << e.second << endl;
	}
	cout << endl;
}

int main()
{

	map_test1();

	return 0;
}

运行结果:

insert-> 插入
love-> 爱情
sort-> 排序

[]: 插入(muyu)
insert-> 插入
love-> 爱情
muyu->
sort-> 排序

[]: 修改(insert)
insert-> xxx
love-> 爱情
muyu->
sort-> 排序

[]: 插入 + 修改(<mutong, 沐潼>)
insert-> xxx
love-> 爱情
mutong-> 沐潼
muyu->
sort-> 排序

在这里, 我们可以 简化之前写的统计次数👇👇👇

int main()
{
	map<string, int> count;
	string arr[] = {"苹果", "桃子", "土豆", "苹果", "栗子", "桃子"};
	for (auto e : arr)
	{
		// 直接改变 e 所对应的value值
		count[e]++;
	}

	for (auto e : count)
	{
		cout << e.first << "-> " << e.second << endl;
	}
	cout << endl;
	
	return 0;
}

运行结果:

栗子-> 3
苹果-> 1
苹果-> 2
土豆-> 4

map的其他迭代器诸如 find, erase, count, lower_bound, upper_bound, equal_range ; 用法都和 set的用法都差不多的, 在这里, 我们就不过多介绍了!

multiset && multimap

multiset 和 multimap都允许 key冗余

void multi_test()
{
	multiset<int> ms;
	ms.insert(1);
	ms.insert(1);
	ms.insert(5);
	ms.insert(2);
	cout << "multiset " << endl;
	for (auto e : ms)
	{
		cout << e << " ";
	}
	cout << endl << endl;

	multimap<string, int> mm;
	mm.insert({ "苹果", 1 });
	mm.insert({ "苹果", 2 });
	mm.insert({ "栗子", 3 });
	mm.insert({ "土豆", 4 });
	cout << "multimap " << endl;
	for (auto e : mm)
	{
		cout << e.first << "-> " << e.second << endl;
	}
	cout << endl;

}

int main()
{
	multi_test();

	return 0;
}

运行结果:

multiset
1 1 2 5

multimap
栗子-> 3
苹果-> 1
苹果-> 2
土豆-> 4

multiset 和 multimap 的其它接口的用法 都是和 set 和 map 都是大致一样的


望门投止思张俭,忍死须臾待杜根;
我自横刀向天笑,去留肝胆两昆仑。
— — 谭嗣同《狱中题壁》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年MathorCup高校数学建模挑战赛大数据挑战赛赛题浅析

比赛时长为期7天的妈杯大数据挑战赛如期开赛&#xff0c;为了帮助大家更好的选题&#xff0c;首先给大家带来赛题浅析&#xff0c;为了方便大家更好的选题。 赛道 A&#xff1a;基于计算机视觉的坑洼道路检测和识别 A题&#xff0c;图像处理类题目。这种题目的难度数模独一档…

如何查看多开的逍遥模拟器的adb连接端口号

逍遥模拟器默认端口号为&#xff1a;21503。 不过&#xff0c;使用多开器多开的时候&#xff0c;端口就不一定是21503了。 如何查看&#xff1f; 进入G:\xiaoyao\Microvirt\MEmu\MemuHyperv VMs路径中 每多开一个模拟器&#xff0c;就会多出一个文件夹。 进入你要查找端口号…

C#,数值计算——分类与推理,基座向量机高斯核(Svmgausskernel)的计算方法与源程序

No logical, not an AI. 你现在能阅读到的大量AI都是假AI&#xff0c;包括 。。。GPT 在内&#xff0c;没有任何鸟用。凡为 ...GPT 发声者均为假学者。 No log, no AI. 1 文本格式 using System; namespace Legalsoft.Truffer { public class Svmgausskernel : Svmgen…

Flask Run运行机制剖析

一、前言 已经玩了一段时间Flask &#xff0c;每次调用app.run(或flask run)就可以启动应用&#xff0c;今天我们就来了解一下run背后究竟做了些什么事情。 注&#xff1a;通过上面几行代码就可以启动一个Flask服务器&#xff0c;打开浏览器输入http://127.0.0.1:5000, 页面上…

sharepoint2016-2019升级到sharepoint订阅版

一、升级前准备&#xff1a; 要建立新的sharepoint订阅版环境&#xff0c;需求如下&#xff1a; 1.单服务器硬件需求CPU 4核&#xff0c;内存24G以上&#xff0c;硬盘300G&#xff08;根据要迁移的数量来扩容大小等&#xff09;&#xff1b; 2.操作系统需要windows server 20…

得物 Redis 设计与实践yu

一、前言 自建 Redis 系统是得物 DBA 团队自研高性能分布式 KV 缓存系统&#xff0c;目前管理的 ECS 内存总容量超过数十TB&#xff0c;数百多个 Redis 缓存集群实例&#xff0c;数万多个 Redis 数据节点&#xff0c;其中内存规格超过 1T 的大容量集群多个。 自建 Redis 系统采…

Linux系统下配置王爽汇编语言环境

【步骤一】 先打开命令行&#xff0c;进入root模式&#xff0c;输入如下语句&#xff1a; sudo apt-get install dosbox 该语句的作用主要是安装dosbox 【步骤二】 安装完成之后&#xff0c;命令行输入dosbox 会进入dosbox页面&#xff1a; 【步骤三】 在你的主机中&…

thinkphp6 自定义命令行command使用

在tp框架中往往需要定义一些命令去大批量的操作行为&#xff0c;直接在控制器中会有超时报错的情况&#xff0c;而且也会很慢&#xff0c;所以就需要使用到tp里的自定义命令行来完成这些操作行为。 比如&#xff1a;现在有一张表数据有上百万&#xff0c;要更新表中某个字段的…

宝塔面板安装Python和Flask(新版Python项目)

&#xff08;一&#xff09;宝塔面板的项目菜单&#xff0c;打开Python项目的“项目版本管理” 安装Python版本3.10.0。 会创建一个Python版本的文件夹www/server/pyproject_evn/versions/ 会创建一个Python虚拟环境的文件夹www/server/pyproject_evn/python_venv/ &#xf…

深入探讨Docker生态系统,Docker Compose vs. Docker Swarm vs. Kubernetes:深入比较

文章目录 Docker ComposeDocker SwarmKubernetesDocker Compose适用场景 Docker Swarm适用场景 Kubernetes适用场景 对比和结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 ✨收录专栏&#xf…

【小黑嵌入式系统第五课】嵌入式系统开发流程——开发工具、交叉开发环境、开发过程(生成调试测试)、发展趋势

上一课&#xff1a; 【小黑嵌入式系统第四课】嵌入式系统硬件平台&#xff08;二&#xff09;——I/O设备、通信设备&#xff08;UART&USB&蓝牙&#xff09;、其他&#xff08;电源&时钟&复位&中断&#xff09; 文章目录 一 嵌入式软件开发工具的分类二 嵌…

Express框架开发接口之登录与注册API

我们利用nodeexpressmysql开发接口&#xff0c;对数据库数据进行简单增、删、查改等操作。 接口是什么&#xff1f; 接口是 前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则 &#xff0c;根据请求响应结果 接口的英文单词是 API (Application Progra…

分支预测机制

在Linux中&#xff0c;__predict_false和__predict_true是用于优化分支预测的宏。这些宏通过向编译器提供关于条件分支可能结果的提示&#xff0c;来帮助生成更有效的机器代码。 __predict_false宏扩展为一个属性&#xff0c;该属性指示编译器预测给定分支可能为假。这意味着&…

jdk20 升级, gson 的坑

项目部署在服务器中请求报下面这个错 java.lang.reflect.InaccessibleObjectException: Unable to make private java.util.Collections$EmptyList() accessible: module java.base does not "opens java.util" to unnamed module 2c35e847at java.base/java.lang.r…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【需水预测】区域需水量预测方法-定额法

区域需水量预测方法-定额法 1 生活用水需水量预测1.1 人口指标预测1.2 居民生活综合用水定额分析 2 农业需水量预测2.1 农田灌溉需水量2.2 林牧渔业需水量另&#xff1a;灌溉面积定义 3 工业需水量预测3.1 工业增加值发展指标预测 4 生态需水量预测4.1 生态环境面积发展指标预测…

APP自动化测试 ---- Appium介绍及运行原理

在面试APP自动化时&#xff0c;有的面试官可能会问Appium的运行原理&#xff0c;以下介绍Appium运行原理。 一、Appium介绍 1.Appium概念 Appium是一个开源测试自动化框架&#xff0c;可用于原生&#xff0c;混合和移动Web应用程序测试。它使用WebDriver协议驱动IOS&#xf…

工具分享:腾讯云价格计算器使用方法_服务器报价不求人

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价&#xff0c;包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用&#xff0c;腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明&#xff1a; 腾讯云服务器价格计算器 打开腾…

项目经验分享|openGauss 陈贤文:受益于开源,回馈于开源

开源之夏 项目经验分享 2023 #08 # 关于 openGauss 社区 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合华为在数据库领域多年的经验&#xff0c;结合企业级场景需求&#xff0c;持续构建竞争力特性。同时openGauss也是…

树莓派基金会近日发布了新版基于 Debian 的树莓派操作系统

导读树莓派基金会&#xff08;Raspberry Pi Foundation&#xff09;近日发布了新版基于 Debian 的树莓派操作系统&#xff08;Raspberry Pi OS&#xff09;&#xff0c;为树莓派单板电脑带来了新的书虫基础和一些重大变化。 新版 Raspberry Pi OS 的最大变化是它现在基于最新的…