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

C++|树形关联式容器(set、map、multiset、multimap)介绍使用

目录

一、关联式容器介绍

1.1概念

1.2键值对

1.3树形结构的关联式容器

 1.3.1pair模板介绍 

1.3.2make_pair的介绍 

二、set的介绍和使用

2.1set介绍

2.2set使用

 2.2.1构造 

2.2.2容量

2.2.3修改

三、map的介绍和使用 

 3.1map介绍

 3.2map使用

 3.2.1构造

3.2.2容量

3.2.3修改

四、multiset和multimap简单介绍使用


一、关联式容器介绍

1.1概念

我们之前学过的STL中的部分容器,比如:string、vector、list、deque等。这些都是序列式容器,他们都是线性序列的数据结构,里面存储的是元素本身。

关联式容器:也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key,value>结构的键值对,在数据检索时比序列式容器效率更高

1.2键值对

在搜索二叉树中的kv模型已经介绍过了键值对了,它是用来表示具有一一对应关系的结构,该结构中包含两个成员变量,key和value,key代表键值,value表示与key对应的信息。比如:建立英汉词典互译、统计value出现的次数 

1.3树形结构的关联式容器

 为了更好的管理数据,STL设计了两种不同结构的管理式容器:树形结构与哈希结构。树形结构的关联式容器主要有四种:map、set、multimap、multiset。他们的底层采用都是平衡搜索树(即红黑树)来实现,容器中的元素是有序的序列。那么接下来在学习他们的用法前,先介绍一下pair,以方便后续理解set,map使用。在下一章节,将会模拟实现他们。

 1.3.1pair模板介绍 

pair有两个模板参数,pair类中有两个元素first,second,分别为T1,T2类型。其中T1被typedef成first_type,T2被typedef成second_type。其中,元素first,second可以修改。对于set,虽然其key值不存在pair当中,但有接口的返回值类型是pair类型。对于map,其值key和value存放在pair中。

函数声明功能介绍
pair();
构造空pair
template<class U, class V> pair (const pair<U,V>& pr);
拷贝构造
pair (const first_type& a, const second_type& b);
分别用两个值初始化pair,即分别初始化pair中的first和second元素
pair& operator= (const pair& pr);
通过对象进行赋值

例子: 

#include <iostream>
using namespace std;int main()
{pair<int, int> p(1, 2);//初始化paircout << p.first << " " << p.second << endl;pair<int, int> pp(p);//拷贝构造pp.first = 3;pp.second = 4;cout << pp.first << " " << pp.second << endl;pair<int, int> ret = pp;//赋值ret.first = 5;ret.second = 6;cout << ret.first << " " << ret.second << endl;return 0;
}

输出结果: 

 

1.3.2make_pair的介绍 

make_pair其实就是一个pair对象。其实现如下 

根据其实现,pair<T1,T2>(x,y) 构造了一个默认pair对象并返回,也就是说,make_pair(T1 x, T2 y) == pair<T1,T2>(x,y) 。所以make_pair即一个pair对象,采用make_pair的好处就是简短了一点。

例如:

#include <iostream>
using namespace std;int main()
{pair<int, int> p(make_pair<int,int>(1,2));//make_pair即一个pair对象,将该对象拷贝给pcout << p.first << " " << p.second << endl;return 0;
}

 输出结果:

go on~ 

二、set的介绍和使用

2.1set介绍

1.set是按照一定次序存储元素的容器,C++中是按中序遍历的。

2.在set中,元素key与value是一一对应的,且是唯一的。set中的key不能在容器中修改(元素总是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中查找某个元素,时间复杂度为:log N

7.红黑树依然是搜索二叉树,只不过其实现二叉搜索树的方式不同,优化了最初的二叉搜索树的缺点。 

set的第一个参数,存放元素的类型,第二个参数表示set元素默认按照小于来比较,第三个参数表示元素空间的管理方式,这个先不做了解,不影响我们的使用模拟实现。

2.2set使用

 2.2.1构造 

函数声明功能介绍
explicit set (const key_compare&comp=key_compare(),const allocator_type& alloc = allocator_type());
构造空set
template <class InputIterator>set (InputIterator first, InputIterator last,const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());
用[first,last)区间中的元素构造set
set (const set& x);
拷贝构造

例子: 

#include <iostream>
#include <set>
using namespace std;int main()
{int arr[] = { 2,34,6,6,56,8,321,9,4,88 };set<int> s(arr, arr + sizeof(arr)/sizeof(arr[0]));//迭代器区间构造for (auto e : s){cout << e << " ";}cout << endl;set<int> s1(s);//拷贝构造for (auto e : s1){cout << e << " ";}cout << endl;return 0;
}

输出结果: 

 

2.2.2容量

函数声明功能介绍
bool empty() const;
检测set是否为空,空返回true,否则返回false
size_type size() const;
返回set中有效元素的个数
size_type max_size() const;
返回set能够存储的最大容量

例子: 

#include <iostream>
#include <set>
using namespace std;int main()
{int arr[] = { 2,34,6,6,56,8,321,9,4,88 };set<int> s(arr, arr + sizeof(arr) / sizeof(arr[0]));//迭代器区间构造for (auto e : s){cout << e << " ";}cout << endl;cout << boolalpha << s.empty() << endl;//bool值形式打印cout << s.size() << endl;cout << s.max_size() << endl;return 0;
}

输出结果: 

 

2.2.3修改

函数声明功能介绍
pair<iterator,bool> insert(const value_type& x)在set中插入元素x,实际插入的是<x,x>构成的键值对,如果插入成功,返回<该元素在set中的位置,true>,失败,说明x在set中已经存在,返回<x在set中的位置,false>
void erase(iterator position)删除迭代器所指向position位置上的元素
size_type erase(const key_type& x)删除set中值为x的元素,返回删除的元素的个数
void erase(iterator first,iterator last)删除迭代器区间[first,last)中的元素
void swap(set& st)交换两个set中的元素
void clear()将set中的元素清空
iterator find(const key_type& x) const返回set中值为x的元素的位置,未找到,返回end()
size_type count(const key_type& x) const返回set中值为x的元素个数,因为set会去重,所以要么返回1,要么返回0

 其中key_type 代表第一个模板参数类型,即T

例子: 

#include <iostream>
#include <set>
using namespace std;int main()
{int arr[] = { 2,34,6,6,8,9,4};set<int> s(arr, arr + sizeof(arr) / sizeof(arr[0]));//迭代器区间构造set<int>::iterator it = s.begin();while(it != s.end()){cout << *it << " ";it++;}cout << endl;it= s.find(6);//返回元素的当前位置cout << *it << endl;cout << s.count(6) << endl;size_t num = s.erase(6);cout << num << endl;s.erase(s.begin());//删除迭代器当前位置元素it = s.begin();while (it != s.end()){cout << *it << " ";it++;}cout << endl;s.erase(s.begin(), s.end());//删除迭代器区间中的元素return 0;
}

输出结果: 

三、map的介绍和使用 

 3.1map介绍

 

1.map是关联式容器,存储由键值key和value组合的元素。key和value的组合元素跟set一样依然是按照key来进行比较排序。

2.在map中,key和value是一一对应的,即使类型不同。由于他们绑定在一起,并为他们取名为pair<key,value>,所以对于map而言Key和value元素存放在pair<const key, T>类模板当中。其typedef pair<const key, T> value_type;

3.map中通过键值访问单个元素的速度通常比unordered_map(哈希实现,遍历顺序是无序的)容器慢,但map遍历顺序是有序的。

4.map支持下标访问,通过key访问,即在[]中放入key,就可以找到key对应的value。

5.map由红黑树实现。

第一个参数表示key的类型,第二个参数表示value的类型。第三个参数表示map中的元素默认是按key来比较,且按小于来比。第四个参数表示空间配置器。

 3.2map使用

 3.2.1构造

函数声明功能介绍
explicit map (const key_compare&comp=key_compare(),const allocator_type& alloc = allocator_type());
构造空map
template <class InputIterator>map (InputIterator first, InputIterator last,const key_compare& comp = key_compare(),const allocator_type& alloc = allocator_type());
用[first,last)区间中的元素构造map
map (const map& x);
拷贝构造
map& operator= (const map& x);
map& operator= (initializer_list<value_type> il);

通过对象进行初始化。

通过初始化列表进行初始化,C++11的用法

例子: 

#include <iostream>
#include <map>
using namespace std;int main()
{map<string, string> mp = { {"apple","苹果"}, {"banana","香蕉"}, {"orange","橙子"} };//初始化列表进行初始化,每个元素都是pair类型for (auto& e : mp)//访问map元素,实则就是pair中的元素{cout << e.first << ":" << e.second << endl;}cout << endl;map<string, string> mmp(mp.begin(), mp.end());//迭代器区间构造map<string, string>::iterator it = mmp.begin();while (it != mmp.end()){cout << it->first << ":" << it->second << endl;it++;}cout << endl;map<string, string> pm(mmp);//拷贝构造for (auto& e : pm){cout << e.first << ":" << e.second << endl;}return 0;
}

 输出结果:

3.2.2容量

函数声明功能简介
bool empty() const;
检测map中元素是否为空,是,返回true,否,返回false
size_type size() const;
返回map中有效元素的个数
mapped_type& operator[] (const key_type& k);

返回key对应的value。(支持插入,修改。若key不存在,则插入value,并返回。若存在,修改value,并返回)

mapped_type& at (const key_type& k);const mapped_type& at (const key_type& k) const;
返回key对应的value。(支持修改,不支持插入。若key不存在,抛异常。若存在,修改value,并返回)

 其中,mapped_type类型是第二个模板参数的类型,即T。

例子: 

#include <iostream>
#include <map>
using namespace std;int main()
{map<string, int> mp = { {"one",1},{"two",2},{"three",3},{"four",4} };cout << boolalpha << mp.empty() << endl;cout << mp.size() << endl;cout << "mp[one]:" << mp["one"] << endl;//返回对应的valuecout << "mp[two]:" << mp["two"] << endl;cout << "mp[three]:" << mp["three"] << endl;cout << "mp[four]:" << mp["four"] << endl << endl;mp["one"] = 5;//修改valuemp["two"] = 6;mp["three"] = 7;mp["four"] = 8;mp["nine"] = 9;//mp对象中没有<nine,9>。则表示新建key,插入9mp["ten"] = 10;cout << "mp[one]:" << mp["one"] << endl;//返回对应的valuecout << "mp[two]:" << mp["two"] << endl;cout << "mp[three]:" << mp["three"] << endl;cout << "mp[four]:" << mp["four"] << endl;cout << "mp[nine]:" << mp["nine"] << endl;cout << "mp[ten]:" << mp["ten"] << endl;return 0;
}

输出结果: 

 

3.2.3修改

函数声明功能介绍
pair<iterator,bool> insert(const value_type& x)在map中插入键值对x,注意x是一个键值对,即pair类型,返回值也是键值对:iterator代表新插入元素的位置,bool代表插入成功

void erase(iterator position)

size_type erase(const key_type& x)

void erase(iterator first,iterator last)

删除position位置上的元素

删除键值为x的元素

删除[first,last)区间中的元素

void swap(map<Key,T,Compare,Allocator>& mp)交换两个map中的元素
void clear()将map中的元素清空

iterator find(const key_type& x)

const_iterator find(const key_type& x) const

在map中插入key为x的元素,找到返回该元素的位置的迭代器,否则返回end()

在map中插入key为x的元素,找到返回该元素的位置的const迭代器,否则返回end()

size_type count(const key_type& x)返回key为x的键值在map中的个数,注意map汇总key是唯一的,因此该函数的返回值要么为0,要么为1,因此也可以用该函数来检测一个key是否在map中

对于operator[]重载实现,实则是按如下:

 

由于该长代码不好理解,将上述进行拆写,那么该重载的实现,可以按以下方式:

	mapped_type& operator[](const k& key){//插入成功,iterator指向的就是插入成功的位置,该位置类型为pair类型。插入失败,说明已经存在,iterator指向的就是已经存在的位置。pair<iterator, bool> p = this->insert(make_pair(k,mapped()));//p.first就是迭代器对象,指向<k,value>所在位置,p.first->second就是valuereturn p.first->second;}

接下来,就对修改的操作进行演示:

#include <iostream>
#include <map>
using namespace std;int main()
{map<string, string> mp;mp.insert(pair<string, string>("insert", "插入"));//将<"insert","插入">插入map中,用pair构造键值对//mp.insert(make_pair("insert","插入"));//通过make_pair构造键值对mp.insert(make_pair("fruit", "水果"));pair<map<string,string>::iterator, bool> p = mp.insert(make_pair("fruit", "水果"));//已经存在<"fruit","水果">,返回falsecout << boolalpha << p.second << endl;//通过operator[]向map中插入元素mp["apple"] = "苹果";//mp.at("peach") = "桃子";//"peach"不存在会抛异常,不会插入map<string, string> m;m.swap(mp);cout << boolalpha << mp.empty() << endl;m.erase("apple");map<string, string>::iterator it = m.find("apple");if (it != m.end()){cout << "苹果存在" << endl;}else{cout << "苹果不存在" << endl;}cout << m.count("peach") << endl;return 0;
}

 输出结果:

 总结一下map:

1.map中的元素是键值对,由pair管理。

2.map中的key是唯一的。

3.默认按照小于的方式对key进行比较

4.map中的元素是按中序的方式打印的,即有序的。

5.[]操作符,可插入,可修改。

四、multiset和multimap简单介绍使用

multiset和multimap跟set和map的使用一样。唯一功能不一样的是,multiset和multimap中的key不去重,正因为有了不去重的功能,所以对于他们就没必要提供operator[],因为该接口是先判断是否已经存在key,是,则返回key对应的value,可以进行对value修改,而不是继续插入key,否,则是新插入key,这就达到了去重的概念。所以他们不提供该接口,而对于其他接口的用法和set、map是类似的。

multiset: 

#include <iostream>
#include <set>
using namespace std;int main()
{string arr[] = { "apple","apple","banana","apple","orange","grape","peach" };multiset<string> s(arr, arr + sizeof(arr)/sizeof(arr[0]));//不去重for (auto& e : s){cout << e << endl;}return 0;
}

输出结果: 

 

multimap:

#include <iostream>
#include <map>
using namespace std;int main()
{multimap<string, string> mlp = { {"apple","苹果"},{"apple","苹果"},{"orange","橙子"},{"peach","桃子"},{"grape","葡萄"},{"apple","苹果"},{"banana","香蕉"} };for (auto& e : mlp){cout << e.first << ":" << e.second << endl;}mlp.insert(make_pair("peach","桃子"));mlp.erase("apple");//删除所有applemultimap<string, string>::iterator it = mlp.find("apple");if (it != mlp.end()){cout << "apple is also exist" << endl;}else{cout << "apple is not exist" << endl;}return 0;
}

 输出结果:

对于他们的底层实现会在之后的章节进一步实现,最后封装map和set 

end~ 

相关文章:

C++|树形关联式容器(set、map、multiset、multimap)介绍使用

目录 一、关联式容器介绍 1.1概念 1.2键值对 1.3树形结构的关联式容器 1.3.1pair模板介绍 1.3.2make_pair的介绍 二、set的介绍和使用 2.1set介绍 2.2set使用 2.2.1构造 2.2.2容量 2.2.3修改 三、map的介绍和使用 3.1map介绍 3.2map使用 3.2.1构造 3.2.2容量 …...

springboot整合s3,用ImageIO进行图片格式转换

上次用laravel进行了一些s3得整合&#xff0c;可以看出来其实蛮简单得。 先导包 <dependency><groupId>software.amazon.awssdk</groupId><artifactId>s3</artifactId></dependency> 然后在配置类中写bean private static final String …...

Windows 10无法远程桌面连接:原因及解决方案

在信息技术日益发展的今天&#xff0c;远程桌面连接已成为企业日常运维、技术支持乃至个人用户远程办公的必备工具。然而&#xff0c;有时我们可能会遇到Windows 10无法远程桌面连接的问题&#xff0c;这无疑会给我们的工作和生活带来诸多不便。 原因分析 1、远程访问未启用&a…...

图神经网络实战(10)——归纳学习

图神经网络实战&#xff08;10&#xff09;——归纳学习 0. 前言1. 转导学习与归纳学习2. 蛋白质相互作用数据集3. 构建 GraphSAGE 模型实现归纳学习小结系列链接 0. 前言 归纳学习 (Inductive learning) 通过基于已观测训练数据&#xff0c;建立一个通用模型&#xff0c;使模…...

Python——IO编程

IO在计算机中指Input/Output&#xff0c;也就是输入和输出。由于程序和运行时数据是在内存中驻留&#xff0c;由CPU这个超快的计算核心来执行&#xff0c;涉及到数据交换的地方&#xff0c;通常是磁盘、网络等&#xff0c;就需要IO接口。 比如你打开浏览器&#xff0c;访问新浪…...

什么是网络端口?为什么会有高危端口?

一、什么是网络端口&#xff1f; 网络技术中的端口默认指的是TCP/IP协议中的服务端口&#xff0c;一共有0-65535个端口&#xff0c;比如我们最常见的端口是80端口默认访问网站的端口就是80&#xff0c;你直接在浏览器打开&#xff0c;会发现浏览器默认把80去掉&#xff0c;就是…...

CleanMyMac X v4.14.6中文破解版,让您的电脑像新的一样

小编给您带来CleanMyMac X v4.14.6中文破解版&#xff0c;CleanMyMac X破解版是应用在MacOS上的一款Mac系统清理优化工具&#xff0c;使用cleanmymac x 中文破解版只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。 CleanMyMa…...

LeetCode 235. 二叉搜索树的最近公共祖先

LeetCode 235. 二叉搜索树的最近公共祖先 1、题目 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表…...

基于ASN.1的RSA算法公私钥存储格式解读

1.概述 RFC5958主要定义非对称密钥的封装语法&#xff0c;RFC5958用于替代RFC5208。非对称算法会涉及到1对公私钥&#xff0c;例如按照RSA算法&#xff0c;公钥是n和e&#xff0c;私钥是d和n。当需要将公私钥保存到文件时&#xff0c;需按照一定的格式保存。本文主要定义公私钥…...

RS2227XN功能和参数介绍及PDF资料

RS2227XN是一款模拟开关/多路复用器 品牌: RUNIC(润石) 封装: MSOP-10 描述: USB2.0高速模拟开关 开关电路: 双刀双掷(DPDT) 通道数: 2 工作电压: 1.8V~5.5V 导通电阻(RonVCC): 10Ω 功能&#xff1a;模拟开关/多路复用器 USB2.0高速模拟开关 工作电压范围&#xff1a;1.8V ~ 5…...

机器人非线性阻抗控制系统

机器人非线性控制系统本质上是一个复杂的控制系统&#xff0c;其状态变量和输出变量相对于输入变量的运动特性不能用线性关系来描述。这种系统的形成基于两类原因&#xff1a;一是被控系统中包含有不能忽略的非线性因素&#xff0c;二是为提高控制性能或简化控制系统结构而人为…...

pandas style添加表格边框,或是只添加下边框等自定义边框样式设置

添加表格边框 可以使用如下程序添加表格&#xff1a; import dataframe_image as dfi import pandas as pd import numpy as npdf pd.DataFrame(np.random.random(size(10, 5))) df_style df.style.set_properties(**{text-align: center,border-color: black,border-width…...

OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL

市面上关于终端&#xff08;手机&#xff09;操作系统在 3GPP 协议开发的内容太少了&#xff0c;即使 Android 相关的学习文档都很少&#xff0c;Android 协议开发书籍我是没有见过的。可能是市场需求的缘故吧&#xff0c;现在市场上还是前后端软件开发从业人员最多&#xff0c…...

windows部署腾讯tmagic-editor02-Runtime

创建editor项目 将上一教程中的hello-world复制过来&#xff0c;改名hello-editor 创建runtime项目 和hello-editor同级 pnpm create vite删除src/components/HelloWorld.vue 按钮需要用的ts types依赖 pnpm add tmagic/schema tmagic/stage实现runtime 将hello-editor中…...

“分块”算法的基本要素及 build() 函数的构建细节

【“分块”算法知识点】 ● 分块是用线段树的分区思想改良的暴力法。代码比线段树简单。效率比普通暴力法高。分块适合求解 m=n=10^5 规模的问题,或 m*sqrt(n)≈10^7 的问题。其中,n 为元素个数,m 为操作次数。 ● “分块”算法的基本要素 (1)块的大小用 block 表示。通常…...

畅捷通TPlus keyEdit.aspx、KeyInfoList.aspx SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…...

Ubuntu22 下配置 Qt5 环境

1. Qt 简介 Qt5 中的新功能&#xff0c;可以看到各个版本的情况Whats New in Qt 5 | Qt 5.15 Qt 源文件网址Index of /archive/qt 2. 安装 Qt Creator cd 到安装包所在目录&#xff0c;进行软件安装。赋予可执行权限&#xff0c;加上 sudo 权限进入安装&#xff0c;这样会安…...

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代&#xff0c;创业似乎成为了越来越多人的梦想。然而&#xff0c;传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程&#xff0c;让许多普通人望而却步。然而&#xff0c;现在有一种轻资产短视频带货项目正在悄然兴起&#xff0c;它以其低…...

【Maven】Nexus简单使用

1、安装配置介绍Nexus私服&#xff1a; 安装配置指路上一篇详细教程博客 【Maven】Nexus私服简介_下载安装_登录-CSDN博客 简单介绍原有仓库类型&#xff1a; proxy代理仓库&#xff1a;代理远程仓库&#xff0c;访问全球中央仓库或其他公共仓库&#xff0c;将资源存储在私…...

winform嵌入excel 设置父窗体分辨率不是100% 嵌入excel分辨率变成双倍大小

在WinForms应用程序中嵌入Excel时&#xff0c;遇到分辨率问题可能是由于DPI缩放导致的。Windows 10及更高版本默认启用了DPI缩放&#xff0c;以便在高分辨率显示器上显示更清晰的内容。这可能会导致嵌入的应用程序&#xff08;如Excel&#xff09;看起来变大或变小。 解决方案 …...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)

题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...