C++之STL的map容器
map
map的实现方式
set是一个有序的关联容器,是基于平衡二叉搜索树(红黑树)实现的,元素是有序的
map的用法
#include <iostream>
#include <map>
using namespace std;const int ADDSIZE = 20;
int main()
{map<int, int> m;cout << "还没有插入数据的时候的情况:" << endl;cout << "m的size为:" << m.size() << endl;cout << "m的max_size为:" << m.max_size() << endl << endl;for(int i = 1; i < ADDSIZE; ++i){auto retResult = m.insert({i, i});/*if(retResult.second){cout << "插入成功,插入的键是:" << retResult.first->first << ",插入的值是:" << retResult.first->second << endl; }else{cout << "插入失败" << endl; }*/}m.insert(make_pair(19, 20)); //键存在就不能插入//m[19] = 666; //键存在就覆盖m[20] = 20;int insertValue = 20;try{auto atIt = m.at(insertValue);cout << atIt << endl;}catch(const out_of_range& e){cout << "没有键为" << insertValue << "的值" << endl;}cout << endl;cout << "1容器的元素为:" << endl;for(auto value : m){cout << "键为:" << value.first << ", 值为:" << value.second << endl;}cout << endl;auto it = m.find(6);if(it != m.end()){cout << "删除的值是:" << it->second << endl;auto it_ = m.erase(it);}cout << "2容器的元素为:" << endl;for(auto value : m){cout << "键为:" << value.first << ", 值为:" << value.second << endl;}cout << endl;return 0;
}
下面是map迭代器的用法
#include <iostream>
#include <map>
using namespace std;const int VALUE = 10;int main()
{map<int, int> m;m[1] = 1;m[2] = 2;m[3] = 3;m[4] = 4;m[5] = 5;//map普通迭代器的用法cout << "map普通迭代器的用法" << endl;for (map<int, int>::iterator it = m.begin(); it != m.end(); ++it) {cout << it->second << "\t";}cout << endl;//map常量迭代器的用法cout << "map常量迭代器的用法" << endl;for (map<int, int>::const_iterator cit = m.cbegin(); cit != m.cend(); ++cit) {cout << cit->second << "\t";}cout << endl;//map反向迭代器的用法cout << "map反向迭代器的用法" << endl;for (map<int, int>::reverse_iterator rit = m.rbegin(); rit != m.rend(); ++rit) {cout << rit->second << "\t";}cout << endl;//map常量反向迭代器的用法cout << "map常量反向迭代器的用法" << endl;for (map<int, int>::const_reverse_iterator crit = m.crbegin(); crit != m.crend(); ++crit) {cout << crit->second << "\t";}cout << endl << endl;for (map<int, int>::iterator it = m.begin(); it != m.end(); ) {cout << "*it的值为:" << it->second << endl;if (it->second == 3) {it = m.insert(it, make_pair(3 * VALUE, 3 * VALUE));}else if (it->second == 2) {//使用erase之后,返回的是下一个有效迭代器的值it = m.erase(it);//m.erase(it++);//m.erase(++it); //不能这样使用,报错}else {++it;}}cout << "现在容器的元素为:" << endl;for (auto value : m) {cout << value.second << "\t";}cout << endl << endl;return 0;
}
插入不会使得任何迭代器失效,返回当前插入元素的迭代器,删除会使指向删除位置的迭代器失效,但是不会失效其他迭代器;erase(it)返回的是下一有效迭代器,也可以使用erase(it++)的方式;但是容器执行clear()的话,所以迭代器失效;
#include <iostream>
#include <map>
using namespace std;
const bool PRINT = true;
const int TESTVALUE = 2;
int main()
{if(PRINT || TESTVALUE == 1){map<int, int> m;m[1] = 1;m[3] = 3;m[4] = 4;map<int, int>::iterator it_1 = m.begin();map<int, int>::iterator it_1_ = m.end();map<int, int>::iterator it_2 = m.begin();it_2 = m.insert(it_2, {2, 2});for(; it_1 != it_1_; ++it_1){cout << it_1->first << "的值为:" << it_1->second << endl; }cout << endl;}if(PRINT || TESTVALUE == 2){map<int, int> m;m[1] = 1;m[3] = 3;m[4] = 4;map<int, int>::iterator it_1 = m.begin();it_1++;//m.erase(it_1++); //方式一it_1 = m.erase(it_1); //方式二/*auto it = m.erase(it_1);cout << typeid(it).name() << endl;*/ for(; it_1 != m.end(); ++it_1){cout << it_1->first << "的值为:" << it_1->second << endl; }cout << endl;}return 0;
}
map迭代器移动的方式如下:
#include <iostream>
#include <map>
#include <iterator>
using namespace std;int main()
{map<int, int> m;m[1] = 1; m[2] = 2; m[3] = 3; m[4] = 4; m[5] = 5;m[6] = 6; m[7] = 7; m[8] = 8; m[9] = 9; m[10] = 10;cout << "容器的元素为:" << endl;for(auto value : m){cout << "键为" << value.first << "的值是" << value.second << endl; }cout << endl;map<int, int>::iterator it = m.begin();cout << "m.begin()的值为:" << it->second << endl;//it += 1; //it = it + 1; //不能这样使用++it;++it; //前缀加加cout << "执行两次++it;后,*it的值为:" << it->second << endl;--it; //前缀减减cout << "执行--it;后,*it的值为:" << it->second << endl;it++; //后缀加加cout << "执行it++;后,*it的值为:" << it->second << endl;it--; //后缀减减cout << "执行it--;后,*it的值为:" << it->second << endl;advance(it, 1); //这个有可能越界的,可以先使用distance()计算cout << "执行advance(it, 1);后,*it的值为:" << it->second << endl;advance(it, -1);cout << "执行advance(it, -1);后,*it的值为:" << it->second << endl;cout << "distance(it, m.end())的值为:" << distance(it, m.end()) << endl;if (distance(it, m.end()) >= 10) {advance(it, 10); //这样就不会溢出 }else {cout << "没有执行advance(it, 10);" << endl;}cout << "distance(m.begin(), it)的值为:" << distance(m.begin(), it) << endl;if (distance(m.begin(), it) >= 10) {advance(it, -10);}else {cout << "没有执行advance(it, -10);" << endl;}/* //不能这样使用cout << "distance(it, m.begin())的值为:" << distance(it, m.begin()) << endl;if (distance(it, m.begin()) <= -10) {advance(it, -10);}else {cout << "没有执行advance(it, -10);" << endl;}*//* 不能这样使用cout << "distance(m.end(), it)的值为:" << distance(m.end(), it) << endl;if (distance(m.end(), it) <= -10) {advance(it, -10);}else {cout << "没有执行advance(it, -10);" << endl;}*/it = next(it, 1); //第二个参数不能为负值if (it != m.end()) {cout << "执行next(it, 1);后,*it的值为:" << it->second << endl;}else {//抛出异常 }it = prev(it, 1); //第二个参数不能为负值if (it == m.begin()) {//这里有可能真正的到达第一个迭代器,也有可能已经越界 }return 0;
}
其他的用法读者可以自己试着用一下,方法就写到这里啦,感想阅读
map的使用场景
1、数据检索和索引
2、映射和关联数组
最后给加一个chatgpt中STL的map的方法回答吧
在 C++ 中,`std::map` 是一个有序的关联容器,它将每个键(`key`)映射到一个值(`mapped_value`),并且按照键的顺序自动排序。`std::map` 不允许键重复,每个键只能对应一个值。它使用平衡二叉搜索树(通常是红黑树)来实现,因此在插入、删除和查找元素时具有对数时间复杂度。以下是 `std::map` 的所有成员函数,按类别整理:### 1. **构造函数与析构函数**- `map()`: 默认构造函数,创建一个空的映射。
- `explicit map(const Compare& comp, const Allocator& alloc = Allocator())`: 使用指定的比较函数(`Compare`)和分配器(`Allocator`)构造一个空的映射。
- `map(InputIterator first, InputIterator last, const Compare& comp = Compare(), const Allocator& alloc = Allocator())`: 使用指定范围的元素构造一个映射。
- `map(const map& other)`: 拷贝构造函数,创建一个作为另一个映射副本的新映射。
- `map(map&& other) noexcept`: 移动构造函数,使用另一个映射的内容来初始化新映射。
- `map(std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator())`: 使用初始化列表来构造映射。
- `~map()`: 析构函数,销毁映射并释放内存。### 2. **赋值操作**- `map& operator=(const map& other)`: 拷贝赋值运算符。
- `map& operator=(map&& other) noexcept`: 移动赋值运算符。
- `map& operator=(std::initializer_list<value_type> ilist)`: 使用初始化列表赋值。### 3. **迭代器**`std::map` 提供了一些迭代器方法,用于遍历映射中的元素:- `iterator begin() noexcept`: 返回指向映射第一个元素的迭代器。
- `const_iterator begin() const noexcept`: 返回指向映射第一个元素的常量迭代器。
- `iterator end() noexcept`: 返回指向映射末尾的迭代器(指向一个比最后一个元素大的位置)。
- `const_iterator end() const noexcept`: 返回指向映射末尾的常量迭代器。
- `reverse_iterator rbegin() noexcept`: 返回指向映射末尾的逆向迭代器。
- `const_reverse_iterator rbegin() const noexcept`: 返回指向映射末尾的常量逆向迭代器。
- `reverse_iterator rend() noexcept`: 返回指向映射第一个元素前的位置的逆向迭代器。
- `const_reverse_iterator rend() const noexcept`: 返回指向映射第一个元素前的位置的常量逆向迭代器。
- `const_iterator cbegin() const noexcept`: 返回指向映射第一个元素的常量迭代器(不可修改)。
- `const_iterator cend() const noexcept`: 返回指向映射末尾的常量迭代器(不可修改)。
- `const_reverse_iterator crbegin() const noexcept`: 返回指向映射末尾的常量逆向迭代器(不可修改)。
- `const_reverse_iterator crend() const noexcept`: 返回指向映射第一个元素前的位置的常量逆向迭代器(不可修改)。### 4. **容量**- `bool empty() const noexcept`: 如果映射为空,则返回 `true`,否则返回 `false`。
- `size_type size() const noexcept`: 返回映射中元素的数量。
- `size_type max_size() const noexcept`: 返回映射可以容纳的最大元素数(由实现限制)。### 5. **访问元素**- `mapped_type& operator[](const key_type& k)`: 如果键 `k` 存在,返回对应的值;如果键 `k` 不存在,插入一个新的键值对,键为 `k`,值为默认构造的值,并返回值的引用。
- `mapped_type& operator[](key_type&& k)`: 如果键 `k` 存在,返回对应的值;如果键 `k` 不存在,插入一个新的键值对,键为 `k`,值为默认构造的值,并返回值的引用(右值引用版本)。
- `iterator find(const key_type& k)`: 查找具有指定键 `k` 的元素,返回该元素的迭代器,如果未找到返回 `end()`。
- `size_type count(const key_type& k) const`: 返回具有指定键 `k` 的元素数量。对于 `map`,这个值始终为 0 或 1。
- `iterator lower_bound(const key_type& k)`: 返回指向第一个不小于 `k` 的元素的迭代器。
- `iterator upper_bound(const key_type& k)`: 返回指向第一个大于 `k` 的元素的迭代器。
- `pair<iterator, iterator> equal_range(const key_type& k)`: 返回一个 `pair`,包含一个迭代器区间,表示所有等于 `k` 的元素(对于 `map`,该区间至多包含一个元素)。### 6. **修改器**- `pair<iterator, bool> insert(const value_type& value)`: 向映射中插入一个元素。如果键已经存在,则插入失败,返回 `false`。
- `pair<iterator, bool> insert(value_type&& value)`: 向映射中插入一个元素,使用右值引用插入。
- `iterator insert(const_iterator hint, const value_type& value)`: 使用指定位置的提示(`hint`)来插入一个元素。
- `iterator insert(const_iterator hint, value_type&& value)`: 使用指定位置的提示(`hint`)插入一个元素,使用右值引用插入。
- `template <class InputIterator> void insert(InputIterator first, InputIterator last)`: 插入一个范围内的元素。
- `void insert(std::initializer_list<value_type> ilist)`: 使用初始化列表插入多个元素。
- `iterator erase(const_iterator pos)`: 删除指定位置的元素。
- `iterator erase(const_iterator first, const_iterator last)`: 删除指定范围内的元素。
- `size_type erase(const key_type& k)`: 删除具有特定键值 `k` 的元素,返回删除的元素数量(最多为 1)。
- `void swap(map& other) noexcept`: 交换两个映射的内容。
- `void clear() noexcept`: 删除映射中的所有元素。### 7. **比较函数**- `key_compare key_comp() const`: 返回用于比较键值的函数对象。
- `value_compare value_comp() const`: 返回用于比较键值对的函数对象。### 8. **非成员函数**- `void swap(map<Key, T, Compare, Allocator>& lhs, map<Key, T, Compare, Allocator>& rhs) noexcept`: 交换两个映射的内容。### 9. **其他**- `iterator at(const key_type& k)`: 如果键 `k` 存在,返回对应的值的迭代器;如果键 `k` 不存在,抛出 `std::out_of_range` 异常。
- `const_iterator at(const key_type& k) const`: 如果键 `k` 存在,返回对应的值的常量迭代器;如果键 `k` 不存在,抛出 `std::out_of_range` 异常。### 10. **比较操作**- `bool operator==(const map& lhs, const map& rhs)`: 判断两个映射是否相等。
- `bool operator!=(const map& lhs, const map& rhs)`: 判断两个映射是否不相等。
- `bool operator<(const map& lhs, const map& rhs)`: 判断左映射是否小于右映射(根据键排序)。
- `bool operator<=(const map& lhs, const map& rhs)`: 判断左映射是否小于或等于右映射(根据键排序)。
- `bool operator>(const map& lhs, const map& rhs)`: 判断左映射是否大于右映射(根据键排序)。
- `bool operator>=(const map& lhs, const map& rhs)`: 判断左映射是否大于或等于右映射(根据键排序)。---### 总结`std::map` 是一个非常有用的关联容器,它通过键值对存储数据,并保持按键排序。它提供了高效的查找、插入和删除操作,并且保证了键的唯一性。使用 `std::map` 时,插入、删除和查找操作的时间复杂度为对数级别(O(log n))。
相关文章:
C++之STL的map容器
map map的实现方式 set是一个有序的关联容器,是基于平衡二叉搜索树(红黑树)实现的,元素是有序的 map的用法 #include <iostream> #include <map> using namespace std;const int ADDSIZE 20; int main() {map<int, int> m;cout &…...
基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源
前言 对于本教程,说白了,就是期望能通过一个程序判断一张图片是否为某个物体,或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题,因此主要处理 是 与 不是 的问题,比如我的模型是判断一张图片是否为苹果…...
react-dnd 拖拽事件与输入框的文本选中冲突
问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...
‘Close Project‘ is not available while IDEA is updating indexes的解决
XXX is not available while IDEA is updating indexes IDEA 1.Remove from Recent Projects 2.重新 Open工程即可...
如何解决samba服务器共享文件夹不能粘贴文件
sudo vim /etc/samba/smb.conf在samba的配置文件中增加一个选项 writable yes重启Samba服务以使更改生效: sudo service smbd restart...
Three.js入门-材质详解,构建视觉真实感的核心
Three.js 材质详解:构建视觉真实感的核心 Three.js 是一个强大的 3D JavaScript 库,它为开发者提供了丰富的工具来创建和渲染逼真的三维场景。在这些工具中,材质是一个非常重要的组成部分。材质定义了物体表面的外观特性,例如颜色…...
GitHub、Google等镜像加速地址收集
GitHub、Google等镜像加速地址收集 摘要 本文用于收集GitHub、Google等镜像/加速地址。 GitHub GitHub加速地址一览 fastgithub Https://www.fastgithub.com/(推荐) 站源地址缓存github.comwww.fastgithub.com无raw.githubusercontent.com无github.gi…...
五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》
目录 一、导论 二、路由选择算法 2.1 路由(route)的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择(lin…...
Fix the “The repository no longer has a Release file” error on Ubuntu 23.04
背景信息 在Ubuntu 23.04操作系统上执行apt-get update命令更新操作系统时,得到以下错误 登录后复制 # apt-get update Ign:1 http://mirrors.aliyun.com/ubuntu lunar InRelease Ign:2 http://mirrors.aliyun.com/ubuntu lunar-updates InRelease Ign:3 http://mir…...
开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力
在当今竞争激烈的商业环境中,私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性,从多个维度为私域流量运营提供了强有力的支持与推动,以下将详细阐述其在各个方面的…...
Java Exception解决方法
Java中的Exception是所有异常的基类,它指的是程序在执行过程中发生的非严重错误,比如空指针异常、数组越界异常等。 为了解决Java中的Exception,从以下步骤进行排查解决: 阅读错误信息:查看异常的完整堆栈跟踪信息&a…...
HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由
网络层数据封装 首先IP地址封装在网络层,它用于标识一台网络设备,其中IP地址分为两个部分,网络地址和主机地址,通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言,它细分为五类,A,B,C,D,E,…...
JeecgBoot passwordChange 任意用户密码重置漏洞复现
0x01 产品简介 Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBoot、SpringCloud、Ant Design、Vue、Mybatis-plus、Shiro、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得…...
7-8 整型关键字的散列映射
给定一系列整型关键字和素数 p,用除留余数法定义的散列函数 H(key)key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数 n(≤1000)和 p(≥n 的最小素数)&…...
谷粒商城—分布式高级①.md
1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…...
MySQL SQL语句性能优化
MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...
【潜意识Java】期末考试可能考的选择题(附带答案解析)
目录 选择题一:Java 数据类型 选择题二:Java 控制结构 选择题三:面向对象编程 选择题四:Java 集合框架 选择题五:Java 异常处理 选择题六:Java 方法 选择题七:Java 流程控制 选择题八&a…...
修炼之道 --- 其一
序言 大家对面试中的面经八股文是怎样的看法呢,从他的名字 八股文 就可以看出来大家可能并不喜欢他,八股文一般是 死板、浮于表面、不重实际 的特点。但是,我们需要通过辩证的角度来看待一个事情,不能单方面来定性! …...
【前端】HTML
目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…...
LabVIEW实现GPS通信
目录 1、GPS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...
【Python 小课堂】第 2 课 Python 基础知识:语句、常量、变量和注释
第 2 课 基础知识:语句、常量/变量和注释 By Yichen Li 2024/12/14 一、内容简介 在本次课中,介绍Python语句、常量/变量以及代码注释的基本概念,一些详细的概念、扩展及用法等细节,留至后续介绍。 二、Python语句 一般来说&…...
基于STM32设计的工地扬尘与噪音实时监测系统(网页)
一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘(实时更新项目内容):https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 近年来,随着城市化进程的…...
LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面
FastAPI是WEB UI接口,随着LLM的蓬勃发展,FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD,来创建一个个性化的电子邮件写作助手,以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...
JavaScript 中的 Map方法
JavaScript 中的 Map方法 在 JavaScript 中,Map 是一种用于存储键值对的数据结构,相较于传统的对象(Object),Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。 1. 创建 Map const map new Map…...
img引入svg如何修改颜色
方法1:通过css中filter:drop-shadow 首先需要一个容纳图标的父盒子(下方实例中的.svg-img),通过css造一个图标的‘影子’(.svg-color中的drop-shadow),然后设置‘影子’的颜色,再把图标本体移出父盒子&…...
自然语言处理基础及应用场景
自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…...
构建centos docker基础镜像
1、介绍 比较老的版本docker镜像,不太好找,可以尝试自己构建 各版本构建基础镜像方法不太一样,方式也不同,自己尝试,本文只介绍了我自己的尝试 2、构建centos5.11 docker镜像 准备iso文件 (1)安…...
etcd命令大全
默认安装自带etcdctl 命令行客户端,分两个版本ETCDCTL_API2和ETCDCTL_API3,两个版本不一样,操作的数据也不相容。 本文以v3 为例。 使用之前需要先设置:export ETCDCTL_API3。 1 etcd查询集群节点列表及状态 标准输出࿱…...
Go有限状态机实现和实战
Go有限状态机实现和实战 有限状态机 什么是状态机 有限状态机(Finite State Machine, FSM)是一种用于建模系统行为的计算模型,它包含有限数量的状态,并通过事件或条件实现状态之间的转换。FSM的状态数量是有限的,因此称…...
使用torch模拟 BMM int8量化计算。
使用torch模型BMM int8计算。 模拟:BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...
vue3的watch一次性监听多个值用法
vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...
【one-api和ollama结合使用】
将Ollama接入one-api one-api是一个开源AI中间件服务,可以聚合各家大模型API,比如OpenAI、ChatGLM、文心一言等,聚合后提供统一的OpenAI调用方法。举个例子:ChatGLM和文心一言的API调用方法并不相同,one-api可以对其进…...
Oracle PDB的开启和关闭
[生产环境关闭与开启Oracle PDB] 【运维场景】 在运维Oracle PDB的时候经常要开启和关闭PDB,对关闭和开启PDB的操作要非常熟悉。 【操作方法】 1. PDB的打开与关闭 关闭和开启DB的时候要看DB的警告日志,日志位置(在Oracle用户下查看&…...
十一、动态构建UI元素
装饰器Builder 装饰器BuilderParam <font style"color:rgba(0, 0, 0, 0.9);">BuilderParam</font> 该装饰器用于声明任意UI描述的一个元素,类似slot占位符。 链接 简而言之:就是自定义组件允许外部传递 UI // SonCom 的实现略…...
智能时代的基石:神经网络
智能时代的基石:神经网络 第一节:神经网络简介 课程目标 本节课程旨在全面介绍神经网络的基本概念、结构以及其在历史发展中的重要里程碑。通过深入理解神经网络的工作原理和演变过程,学员将能够掌握神经网络在现实世界中的多种应用&#…...
VScode配置GIT
在Visual Studio Code(VSCode)中检测不到已安装的Git可以通过以下步骤来解决: 确认Git是否正确安装:首先,确保在计算机上正确安装了Git。可以通过打开命令行窗口并输入git --version来检查是否能够显示Git的版本…...
【CSS】css 如何实现固定宽高比
今天和同事讨论这个问题,一时间还想不到了,于是学习了下,就顺便当个记录吧 要在CSS中实现固定宽高比,有两种主要的方法可以选择。一种是使用新的aspect-ratio属性,另一种是利用padding技巧。随着现代浏览器对aspect-ra…...
使用webrtc-streamer查看实时监控
摄像头配置(海康摄像头为例) 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行,端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…...
ansible部署nginx:1个简单的playbook脚本
文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…...
Ubuntu安装Gitlab详细图文教程
1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…...
前端面试准备问题2
1.防抖和节流分别是什么,应用场景 防抖:在事件被触发后,只有在指定的延迟时间内没有再次触发,才执行事件处理函数。 在我的理解中,简单的说就是在一个指定的时间内,仅触发一次,如果有多次重复触…...
uni-app之web-view组件 postMessage 通信【跨端开发系列】
🔗 uniapp 跨端开发系列文章:🎀🎀🎀 uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…...
IntelliJ IDEA 使用技巧与插件推荐
目录 常用使用技巧 1. 使用快捷键提升开发效率 2. 多光标编辑 3. 代码自动补全 4. 使用 Find Action 快速执行操作 5. 集成版本控制系统(VCS) 6. 快速查看代码文档 推荐插件 1. Lombok Plugin 2. Rainbow Brackets 3. Key Promoter X 4. Chec…...
zookeeper基础命令详解
zookeeper基础命令详解目录 文章目录 zookeeper基础命令详解目录一、列出所有基础命令 一、列出所有基础命令 先启动一个zookeeper客户端连接zookeeper,如果还没有启动zookeeper集群的参考本文启动之后再做后续操作。 https://blog.csdn.net/weixin_42924400/artic…...
2025周易算命网站搭建详细方法+源码选择php环境的配置
以下是一个详细的搭建教程,包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux(推荐使用Ubuntu或CentOS)Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x(确保小于8.0) 1.2 安…...
16:00面试,16:06就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
《杨辉三角》
题目描述 给出 n(1≤n≤20)n(1≤n≤20),输出杨辉三角的前 nn 行。 如果你不知道什么是杨辉三角,可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 C语言…...
2024年03月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析
青少年软件编程(Python)等级考试试卷(五级) 分数:100 题数:38 一、单选题(共25题,共50分) 1. 以下代码的输出结果是?( ) nums = list(range(100, 201)) print...
【游戏设计原理】7 - 加德纳的多元智能理论
虽然多元智能理论是对认知方式的分类,但它也可以为游戏设计提供丰富的思路和策略,帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势,我们可以更精准地设计游戏的元素和玩法,使其能够吸引广泛的…...
Jackson @JsonProperty 注解
1. 概述 Jackson 是一个流行的Java库,用于将Java对象转换为JSON格式以及从JSON反序列化回Java对象。一种常见的需求是在序列化为JSON或从JSON反序列化时自定义字段的命名。Jackson 的 JsonProperty 注解正好满足了这一需求。 JsonProperty 注解概览 JsonProperty…...