map和set的具体用法 【C++】
文章目录
- 关联式容器
- 键值对
- set
- set的定义方式
- set的使用
- multiset
- map
- map的定义方式
- insert
- find
- erase
- []运算符重载
- map的迭代器遍历
- multimap
关联式容器
关联式容器里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比如:set、map、unordered_set、unordered_map等
注意: C++STL当中的stack、queue和priority_queue属于容器适配器,它们默认使用的基础容器分别是deque、deque和vector
键值对
键值对是用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。
比如:建立一个英译汉的字典,那么该字典中的英文单词与其对应的中文含义就是一一对应的关系,即通过单词可以找到与其对应的中文含义。
在SGI-STL中关于键值对的定义如下:
template <class T1, class T2>
struct pair
{typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair() : first(T1()), second(T2()){}pair(const T1& a, const T2& b) : first(a), second(b){}
};
set
1、set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列
2、set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重
3、与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放value,但在底层实际存放的是由<value, value>构成的键值对,在set容器中插入元素时,只需要插入value即可,不需要构造键值对
4、set中的元素不能被修改,set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树
5、在内部,set中的元素总是按照其内部比较对象所指示的特定严格弱排序准则进行排序。当不传入内部比较对象时,set中的元素默认按照小于来比较
6、set容器通过key访问单个元素的速度通常比unordered_set容器慢,但set容器允许根据顺序对元素进行直接迭代
7、set在底层是用平衡搜索树(红黑树)实现的,所以在set当中查找某个元素的时间复杂度为logN
set的定义方式
//构造int类型的空容器
set<int> s1; //拷贝构造int类型s1
set<int> s2(s1);
string str("abcdef");//拷贝string
set<char> s3(str.begin(), str.end()); //构造int类型的空容器,比较方式指定为大于
set < int, greater<int>> s4;
set的使用
void Testset()
{//去重set<int> s;s.insert(1);s.insert(4);s.insert(3);s.insert(3);s.insert(2);s.insert(2);s.insert(3);//遍历方式一for (auto e : s){cout << e << " ";}cout << endl;//删除方式一s.erase(3);//遍历方式二set<int>::iterator it = s.begin();while (it != s.end()){cout << *it << " ";it++;}cout << endl;//删除方式二, 正向迭代器遍历 set<int>::iterator pos = s.find(1);if (pos!=s.end()){s.erase(pos);}//遍历方式三set<int>::reverse_iterator rit = s.rbegin();while (rit != s.rend()){cout << *rit << " ";rit++;}cout << endl;//容器中值为2的个数 cout<<s.count(2);cout << s.size();s.clear();cout << s.empty();}void TestmultiSet()
{//可以重复 multiset<int> m;m.insert(3);m.insert(5);m.insert(8);m.insert(7);m.insert(7);m.insert(9);m.insert(7);for (auto e : m){cout << e << "";}//find //set<int> s;//s.insert(1);//s.insert(4);//s.insert(3);//s.insert(3);//s.insert(2);//s.insert(2);//s.insert(3);//if (s.find(3) != s.end())//{// cout << "找到了" << " ";//}//else//{// cout << "找不到" << " ";//}auto pos = m.find(7);//返回中序中第一个7while (pos != m.end()){cout << *pos << " ";pos++;}cout << endl;cout << m.count(7) << endl;auto ret = m.equal_range(17);auto itlow = ret.first;auto itup = ret.second;//[itlow , itup) 左闭右开 左边界是第一个7,右边界是比7大的,才能完全删除所有的7cout << *itlow<<endl;cout << *itup<<endl;m.erase(itlow, itup);//?for (auto e : m){cout << e << " ";}cout << endl;}
void Testset2()
{set<int> s;s.insert(1);s.insert(4);s.insert(3);s.insert(3);s.insert(2);s.insert(2);s.insert(3);//交换两个容器的数据 set<int> tmp{ 11,22,33,44 };s.swap(tmp);for (auto e : s){cout << e << " ";}cout << endl;
}int main()
{
Testset();
TestmultiSet();
Testset2();
return 0 ;
}
multiset
multiset容器与set容器的底层实现一样,都是平衡搜索树(红黑树),其次,multiset容器和set容器所提供的成员函数的接口都是基本一致的,multiset容器和set容器的唯一区别就是,multiset允许键值冗余,即multiset容器当中存储的元素是可以重复的。
#include <iostream>
#include <set>
using namespace std;int main()
{multiset<int> ms;//插入元素(允许重复)ms.insert(1);ms.insert(4);ms.insert(3);ms.insert(3);ms.insert(2);ms.insert(2);ms.insert(3);for (auto e : ms){cout << e << " ";}cout << endl; //1 2 2 3 3 3 4return 0;
}
map
1、map是关联式容器,它按照特定的次序(按照key来比较)存储键值key和值value组成的元素,使用map的迭代器遍历map中的元素,可以得到有序序列。
2、在map中,键值key通常用于排序和唯一地标识元素,而值value中存储与此键值key关联的内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型value_type绑定在一起,并取别名为pair。
3、map容器中元素的键值key不能被修改,但是元素的值value可以被修改,因为map底层的二叉搜索树是根据每个元素的键值key进行构建的,而不是值value。
4、在内部,map中的元素总是按照键值key进行比较排序的。当不传入内部比较对象时,map中元素的键值key默认按照小于来比较。
5、map容器通过键值key访问单个元素的速度通常比unordered_map容器慢,但map容器允许根据顺序对元素进行直接迭代。
6、map容器支持下标访问符,即在[]中放入key,就可以找到与key对应的value。
7、map在底层是用平衡搜索树(红黑树)实现的,所以在map当中查找某个元素的时间复杂度为logN
map的定义方式
map<int, double> m1; //构造一个key为int类型,value为double类型的空容器map<int, double> m2(m1); //拷贝构造key为int类型,value为double类型的m1容器的复制品map<int, double> m3(m2.begin(), m2.end()); //使用迭代器拷贝构造m2容器某段区间的复制品map<int, double, greater<int>> m4; //构造一个key为int类型,value为double类型的空容器,key比较方式指定为大于
insert
pair<iterator,bool> insert (const value_type& val);
value_type类型的,实际上value_type就是pair类型的别名:
typedef pair<const Key, T> value_type;
插入元素时,需要用key和value构造一个pair对象,然后再将pair对象作为参数传入insert函数
方式一:匿名对象
#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{map<int, string> m;//方式一:调用pair的构造函数,构造一个匿名对象插入m.insert(pair<int, string>(2, "two"));m.insert(pair<int, string>(1, "one"));m.insert(pair<int, string>(3, "three"));for (auto e : m){cout << "<" << e.first << "," << e.second << ">" << " ";}cout << endl; //<1,one> <2,two> <3,three>return 0;
}
方式二:调用make_pair函数模板插入(常用)
库当中提供以下make_pair函数模板:
template <class T1, class T2>
pair<T1, T2> make_pair(T1 x, T2 y)
{return (pair<T1, T2>(x, y));
}
向make_pair函数传入key和value,该函数模板会根据传入参数类型进行自动隐式推导,最终构造并返回一个对应的pair对象
#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{map<int, string> m;//方式二:调用函数模板make_pair,构造对象插入m.insert(make_pair(2, "two"));m.insert(make_pair(1, "one"));m.insert(make_pair(3, "three"));for (auto e : m){cout << "<" << e.first << "," << e.second << ">" << " ";}cout << endl; //<1,one> <2,two> <3,three>return 0;
}
insert函数的返回值
总结文档的内容:
insert函数的返回值也是一个pair对象,该pair对象中第一个成员的类型是map的迭代器类型,第二个成员的类型的一个bool类型,具体含义如下:
1、如果待插入元素的键值key在map当中不存在,则insert函数插入成功,并返回插入后元素的迭代器和true。
2、如果待插入元素的键值key在map当中已经存在,则insert函数插入失败,并返回map当中键值为key的元素的迭代器和false。
find
iterator find (const key_type& k);
根据所给key值在map当中进行查找,若找到了,则返回对应元素的迭代器,若未找到,则返回容器中最后一个元素下一个位置的正向迭代器。
#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{map<int, string> m;m.insert(make_pair(2, "two"));m.insert(make_pair(1, "one"));m.insert(make_pair(3, "three"));//获取key值为2的元素的迭代器map<int, string>::iterator pos = m.find(2);if (pos != m.end()){cout << pos->second << endl; //two}return 0;
}
erase
根据key值删除指定元素,也可以根据迭代器删除指定元素,若是根据key值进行删除,则返回实际删除的元素个数。
#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{map<int, string> m;m.insert(make_pair(2, "two"));m.insert(make_pair(1, "one"));m.insert(make_pair(3, "three"));for (auto kv : m){cout << kv.first<<" " << kv.second;}cout << endl;//根据key值进行删除m.erase(3);for ( auto kv : m){cout << kv.first << " " << kv.second;}//根据迭代器删除 map<int, string>::iterator pos = m.find(2);while (pos != m.end()){m.erase(pos);}for (auto kv : m){cout << kv.first << " " << kv.second;}return 0;
}
[]运算符重载
[ ]运算符重载函数的参数就是一个key值,而这个函数的返回值如下:
(* ( (this->insert( make_pair(k, mapped_type() ) ) ).first) ).second
根据上述代码可以推断出[ ],运算符重载实现的逻辑:
mapped_type& operator[] (const key_type& k)
{//1、调用insert函数插入键值对pair<iterator, bool> ret = insert( make_pair(k, mapped_type() ) );//2、拿出从insert函数获取到的迭代器iterator it = ret.first;//3、返回该迭代器位置元素的值valuereturn it->second;
}
[]运算符的使用
int main()
{map<string, string> dict;dict.insert(make_pair("string", "字符串"));dict.insert(make_pair("sort", "排序"));dict.insert(make_pair("insert", "插入"));cout << dict["sort"] << endl;//查找和读dict["map"];//插入dict["map"] = "映射,地图";//修改dict["insert"] = "xxx";//修改dict["set"] = "集合";//插入+修改
}
总结一下:
1、如果k不在map中,则先插入键值对<k, V()>,然后返回该键值对中V对象的引用。
2、如果k已经在map中,则返回键值为k的元素对应的V对象的引用。
map的迭代器遍历
int main()
{map<int, string> m;m.insert(make_pair(2, "two"));m.insert(make_pair(1, "one"));m.insert(make_pair(3, "three"));//正向迭代器 map<int, string>::iterator it = m.begin();while (it != m.end()){//cout << (*it).first << ":"<<(*it).second<<endl;//迭代器重载operator*cout << it->first << ":" << it->second << endl;//迭代器重载operator->it++; }cout << endl;//反向迭代器 map<int, string>::reverse_iterator rit = m.rbegin();while (rit != m.rend()){cout << " " << rit->first << " " << rit->second;rit++;}cout << endl;//范围for ,kv就是*itfor (auto kv : m){cout << kv.first <<" " << kv.second;}return 0;
}
multimap
multimap容器与map容器的底层实现一样,也都是平衡搜索树(红黑树),multimap容器和map容器的区别与multiset容器和set容器的区别一样,multimap允许键值冗余,即multimap容器当中存储的元素是可以重复的。
#include <iostream>
#include <string>
#include <map>
using namespace std;int main()
{multimap<int, string> mm;//插入元素(允许重复)mm.insert(make_pair(2, "two"));mm.insert(make_pair(2, "double"));mm.insert(make_pair(1, "one"));mm.insert(make_pair(3, "three"));for (auto e : mm){cout << "<" << e.first << "," << e.second << ">" << " ";}cout << endl; //<1,one> <2,two> <2,double> <3,three>return 0;
}
如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!
相关文章:
map和set的具体用法 【C++】
文章目录 关联式容器键值对setset的定义方式set的使用 multisetmapmap的定义方式insertfinderase[]运算符重载map的迭代器遍历 multimap 关联式容器 关联式容器里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。比如:set…...
聚合统一,SpringBoot实现全局响应和全局异常处理
目录 前言 全局响应 数据规范 状态码(错误码) 全局响应类 使用 优化 全局异常处理 为什么需要全局异常处理 业务异常类 全局捕获 使用 优化 总结 前言 在悦享校园1.0版本中的数据返回采用了以Map对象返回的方式,虽然较为便捷但也带来一些问题。一是在…...
【C/C++笔试练习】——数组名和数组名、switch循环语句、数据在计算机中的存储顺序、字符串中找出连续最长的数字串、数组中出现次数超过一半的数字
文章目录 C/C笔试练习1.数组名和&数组名(1)数组名和&数组名的差异(2)理解数组名和指针偏移(3)理解数组名代表的含义(4)理解数组名代表的含义 2.switch循环语句(6…...
力扣每日一题(+日常水题|树型dp)
740. 删除并获得点数 - 力扣(LeetCode) 简单分析一下: 每一个数字其实只有2个状态选 or 不 可得预处理每一个数初始状态(不选为0,选为所有x的个数 * x)累加即可 for(auto &x : nums)dp[x][1] x;每选一个树 i 删去 i 1 和 i - 1 故我们可以将 i…...
使用perming加速训练可预测的模型
监督学习模型的训练流程 perming是一个主要在支持CUDA加速的Windows操作系统上架构的机器学习算法,基于感知机模型来解决分布在欧式空间中线性不可分数据集的解决方案,是基于PyTorch中预定义的可调用函数,设计的一个面向大规模结构化数据集的…...
【数据库】存储引擎InnoDB、MyISAM、关系型数据库和非关系型数据库、如何执行一条SQL等重点知识汇总
目录 存储引擎InnoDB、MyISAM的适用场景 关系型和非关系型数据库的区别 MySQL如何执行一条SQL的 存储引擎InnoDB、MyISAM的适用场景 InnoDB 是 MySQL 默认的事务型存储引擎,只有在需要它不支持的特性时,才考虑使用其它存储引擎。实现了四个标准的隔…...
车道线分割检测
利用opencv,使用边缘检测、全局变化梯度阈值过滤、算子角度过滤、HLS阈值过滤的方法进行车道线分割检测,综合多种阈值过滤进行检测提高检测精度。 1.利用cv2.Sobel()计算图像梯度(边缘检测) import cv2 import numpy as np import matplotlib.pyplot a…...
树莓集团又一力作,打造天府蜂巢成都直播产业园样板工程
树莓集团再次推出惊艳之作,以打造成都天府蜂巢直播产业园为目标。该基地将充分展现成都直播产业园的巨大潜力与无限魅力,成为一个真正的产业园样板工程。 强强联手 打造未来 成都天府蜂巢直播产业园位于成都科学城兴隆湖高新技术服务产业园内࿰…...
ubuntu 软件包管理之二制作升级包
Deb 包(Debian 软件包)是一种用于在 Debian 及其衍生发行版(例如 Ubuntu)中分发和安装软件的标准包装格式。它们构成了 Debian Linux 发行版中的软件包管理系统的核心组成部分,旨在简化软件的分发、安装、更新和卸载流程。在本篇文章中,我们将深入探讨以下内容: Deb 包基…...
TCP/IP网络江湖——数据链路层的防御招式(数据链路层下篇:数据链路层的安全问题)
目录 引言 一、 数据链路层的隐私与保密 二、数据链路层的安全协议与加密...
ios项目安装hermes-engine太慢问题
问题说明 ios工程,在使用"pod install"安装依赖的时候,由于超时总是报错 $ pod install ... Installing hermes-engine (0.71.11)[!] Error installing hermes-engine [!] /usr/bin/curl -f -L -o /var/folders/4c/slcchpy55s53ysmz_1_q_gzw…...
构建个人云存储:本地电脑搭建SFTP服务器,开启公网访问,轻松共享与管理个人文件!
本地电脑搭建SFTP服务器,并实现公网访问 文章目录 本地电脑搭建SFTP服务器,并实现公网访问1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内…...
springboot 下载文件为excel数据,中文自定义单元格宽度
/**2 * Description:表格自适应宽度(中文支持)3 * Author: 4 * param sheet sheet5 * param columnLength 列数6 */7 private static void setSizeColumn(HSSFSheet sheet, int columnLength) {8 for (int columnNum 0; columnNum < …...
机器学习 面试/笔试题
1. 生成模型 VS 判别模型 生成模型: 由数据学得联合概率分布函数 P ( X , Y ) P(X,Y) P(X,Y),求出条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)的预测模型。 朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机…...
某企查ymg_ssr列表详情
js篇— 今天来看下某企查的列表详情–侵删 header发现这个参数 先断点一下 然后上一步 就到了这个地方 就开始扣一下这个js 三大段,先不解混淆了, 给a粘贴出来 ,去掉自执行 给结果稍微改一下 缺windows,开始补环境 直接上…...
使用YOLOv5的backbone网络识别图像天气 - P9
目录 环境步骤环境设置包引用声明一个全局的设备 数据准备收集数据集信息构建数据集在数据集中读取分类名称划分训练、测试数据集数据集划分批次 模型设计编写维持卷积前后图像大小不变的padding计算函数编写YOLOv5中使用的卷积模块编写YOLOv5中使用的Bottleneck模块编写YOLOv5…...
TikTok海外扩张:亚马逊的新对手崛起
随着社交媒体和电子商务的融合,TikTok正迅速崭露头角,成为亚马逊等传统电商巨头的潜在竞争对手。这一新兴平台的快速发展引发了广泛的关注,特别是在全球范围内。 在这篇文章中,我们将探讨TikTok海外扩张的战略,以及它…...
CSS详细基础(五)选择器的优先级
本节介绍选择器优先级,优先级决定了元素最终展示的样式~ 浏览器是通过判断CSS优先级,来决定到底哪些属性值是与元素最为相关的,从而作用到该元素上。CSS选择器的合理组成规则决定了优先级,我们也常常用选择器优先级来合理控制元素…...
LLM-TAP随笔——有监督微调【深度学习】【PyTorch】【LLM】
文章目录 5、 有监督微调5.1、提示学习&语境学习5.2、高效微调5.3、模型上下文窗口扩展5.4、指令数据构建5.5、开源指令数据集 5、 有监督微调 5.1、提示学习&语境学习 提示学习 完成预测的三个阶段:提示添加、答案搜索、答案映射 提示添加 “[X] 我感到…...
kafka伪集群部署,使用docker环境拷贝模式
线上启动容器的方式是复制容器的运行环境出来,然后进行运行脚本的形式 1:在home/kafka目录下创建如下目录 2:复制kafka1容器内的数据/bitnami/kafka/data,直接放在1992_data里面,同理,复制kafka2容器内的数据/bitnami/…...
工业交换机一般的价格是多少呢?
工业交换机是一种应用于工业领域的网络设备。它的性能和所有安全指标都比一般商业交换机更加稳定。所以,工业级交换机的价格相对于普通的交换机要稍稍昂贵一些。工业交换机一般的价格是多少呢?每个厂家的交换机价格是不是都一样呢? 首先&…...
QT使用前的知识
QT使用前的知识 常用的快捷键 源文件的内容解释 .pro文件的解释 头文件的解释 构建新的对象—组成对象树 槽函数 自定的信号和槽 槽函数的信号是一个重载函数时 电机按钮触发信号 调用无参数的信号 断开信号...
Unity制作旋转光束
Unity制作旋转光束 大家好,我是阿赵。 这是一个在很多游戏里面可能都看到过的效果,在传送门、魔法阵、角色等脚底下往上散发出一束拉丝形状的光,然后在不停的旋转。 这次来在Unity引擎里面做一下这种效果。 一、准备材料 需要准备的素材很简…...
考研王道强化阶段(二轮复习)“算法题”备考打卡表 记录
问题:做408真题_2010_42题,即王道书 2.2.3_大题_10 思路: 回头补 代码: int moveL(SqlList &L,SqlList &S,int p) {// 健壮性表达if( L.len 0 ){return 0;}// 调用另外一个顺序表存储pos前面的元素for( int i0;i<p;…...
UE4/5数字人MetaHuman通过已有动画进行修改
目录 通过已有动画修改动画 开始制作 创建一个关卡序列 将动画序列烘焙到控制绑定 打开我们自己创建的动画序列 之后便是烘焙出来 通过已有动画修改动画 首先架设我们已经有相关的MetaHuman的动画,但是这个动画因为是外部导入进来的,所以可能会出…...
在Mac M2本地注册GitLab runner
最近在搞公司的CI/CD,简单记录下部分过程 安装runner sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-arm64" 创建runner 这个步骤需要在gitlab中进行&am…...
「大数据-2.2」使用命令操作HDFS文件系统
目录 一、HDFS文件系统基本信息 1. HDFS的路径表达形式 2.HDFS和Linux的根目录的区分 二、 使用命令操作HDFS文件系统 0. Hadoop的两套命令体系 1. 创建文件夹 2. 查看指定目录下内容 3. 上传文件到HDFS指定目录下 4. 查看HDFS文件内容 5. 下载HDFS文件 6. 拷贝HDFS文件 7.…...
面试买书复习就能进大厂?
大家好,我是苍何。 现在进大仓是越来越难了,想通过简单的刷题面试背书,比几年前难的不少, 但也并非毫无希望,那究竟该如何准备才能有希望进大厂呢? 我总结了 4 点: 1、不差的学历背景 2、丰富…...
使用Http Interface客户端解析text/html类型参数
前言 Spring6和Spring Boot3的正式发布也有一段时间了,最低支持的java版本也是直接跳到了17。而且最近java21也出来了,作为一个javaer,你不会还在坚守java8吧? Http Interface是Spring6新推出的一个声明式http客户端,…...
Linux - linux命令进阶
打包压缩解压 基本概述 打包 将多数文件或目录汇总成一个整体 打包默认没有压缩功能,不节省磁盘空间 压缩 将大文件压缩成小文件 可以节省磁盘空间 打包压缩 将一堆零散的文件打包到一起,然后再压缩,可以节省磁盘空间 打包命令 命令格式 ta…...
网站建设与管理是哪个软件/关键词seo优化软件
http://youngking999999.blog.163.com/blog/#m0&t1&cfks_087068084083085065085080083095085085085067085094094074087在一位博友那里看到这些经典屁话,觉得有意思,引用来给我自己看。原因很简单,它一部分为经典,一部分是…...
如何把网站设为正确建设中/应用市场
欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取精品学习资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777 nor 随机存储 速率快,内存下(可以块操作) 一般用来…...
速升网站/搜索引擎优化技巧
一、单项选择题(本大题共20小题,每小题2分,共40分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.下面不属于网络操作系统功能的是(B …...
爱网站免费一站二站/域名停靠浏览器
Deadline:2018/6/5 22:00 一、团队介绍 根据现行队伍组成, 每个队伍发表一篇随笔,包括: 队员姓名、学号、博客地址(标记组长)队员风采:介绍每一队员的风格、擅长的技术、编程的兴趣、一句话宣言…...
广州白云网站建设公司/产品推广平台有哪些
方法1:快捷键:CtrlF5 方法2:菜单栏 > Display > Color/visibility 方法3:点击四色块状的图标 配置项1:透明度 Global Transparency ,全局透明度,建议设置70%以上,接近实心…...
做外汇网站代理/网络营销是什么
然而并没有什么好论的。。。 直接贴代码算了。。。 ll Mul(ll x,ll y,ll Mod){x(x%ModMod)%Mod;y(y%ModMod)%Mod;return (x*y-(long long)((long double)x/Mod*y0.5)*ModMod)%Mod; } 转载于:https://www.cnblogs.com/yanshannan/p/9649887.html...