首页 > 编程语言 >算法题里存储数据的方式(C++)

算法题里存储数据的方式(C++)

时间:2024-07-09 09:57:07浏览次数:22  
标签:set 题里 int C++ 关键字 算法 vec pair 排序

这里分享的不是如邻接矩阵 邻接表的算法存储,仅仅是一些特殊数据的简易存储,以方便操作

1、map<int,vector<int>> mp

当给出很多串数字,每一串数字都需要单数放一个一维数组里,但是开辟一个二维数组内存又过大,并且不好操作时,可以用map<int,vector<int>> mp 来存储,这样就可以单独操作某一串数了

例如存储:第一列数字是这一串数字的个数(第一关键字),后面是具体的数字
                  后面是代码的输出结果,因为map会自动按第一关键字排序,所以第二行会先输出

                                    

map<int,vector<int>> mp;

for(int i=0;i<3;i++){
    int n;
    cin>>n;
    for(int j=0;j<n;j++){
        int x;
        cin>>x;
        mp[n].push_back(x);
    }
}

for(auto t:mp){   //范围for 循环来遍历
    for(int i=0;i<t.first;i++){
        cout<<t.sd[i]<<" ";     //这里就可以是对数组的操作
    }
    cout<<endl;
}

2、vector<int> vec[N]

这种形式和上面那个的作用是一样的,都是可以单独把一串数字放在一个单独区域里的,相对于二维数组来说会节省空间。输入的还是上面那组数据:

vector<int> vec[3];
    
for(int i=0;i<3;i++){
    int n;
    cin>>n;
    for(int j=0;j<n;j++){
        int x;
        cin>>x;
        vec[i].push_back(x);
    }
}

for(int i=0;i<3;i++){
    for(auto t:vec[i]){
        cout<<t<<' ';
    }
    cout<<endl;
}

图示一下结构:

3、pair<int ,int > p[N]

这个在存一对数据的时候很好用,同时可以自由调整关键字排序(map最好不要修改排序规则,会造成错误)输入输出:

                             

pair<int,int> p[3];

for(int i=0;i<3;i++){
    int a,b;
    cin>>a>>b;
    
    p[i]={a,b};   //这两种形式都可以
    p[i]=make_pair(a,b);
}

for(auto t:p){
    cout<<t.first<<' '<<t.second<<endl;
}

4、pair的关键字排序

pair可以按任意关键字排序,值得注意的是,当按第一关键字排序,但是第一关键字相等时,可以按第二关键字再排序

bool cmp(const pair<int, int> &a, const pair<int, int> &b)
{
    if(a.fr==b.fr)  return a.sd < b.sd;
    return a.fr > b.fr;
}

这里是按第一关键字从大到小排序,当第一关键字相等时,按第二关键字从小到大排序,只需要修改大于 小于号就能改变排序规则了

5、固定数组(array)

array的大小是固定的,必须在创建时指定。一旦创建,它的 size 不可改变。一般在二进制有关的题目中可以用到,存放每一位二进制的值

array<int,32> bit(n);  //固定大小为32的数组

6、set <int> 

set就是默认去重的容器,并且默认按升序排序。此时set内只有  1 和 2

set<int> se;

se.insert(1);
se.insert(2);
se.insert(2);

如果需要给数组排序,直接丢进set里效率并不高,此时可以用 unique() 函数去重

vector<int> vec;

vec.erase(unique(vec.begin(), vec.end()), vec.end());

7、当给出三个或四个数据为一组

比如 每一行数据都是 a,b,c,d,可以用 pair<pair<int,int>,pair<int,int>> 这种很集合的方式存,也可以开四个数组 A[n] B[n] C[n] D[n] 来存

pair<pair<int,int>,pair<int,int>> p;

int a=p.first.second;  //遍历需要两个关键字

int a[N],b[N],c[N],d[N];

8、字符串存储

char c[100][100];

for(int i=0;i<3;i++)  cin>>c[i];  
for(int i=0;i<3;i++ ) cout<<c[i]<<endl;

string s[100];

for(int i=0;i<3;i++) cin>>s[i];
for(int i=0;i<3;i++) cout<<s[i]<<endl;


 gg,推荐课程:https://xxetb.xetslk.com/s/kNPSd

标签:set,题里,int,C++,关键字,算法,vec,pair,排序
From: https://blog.csdn.net/2301_77671421/article/details/140237354

相关文章

  • C++ 保障异常安全的手段和措施
    在C++中,保障异常安全是编写健壮、可靠代码的重要方面。异常安全确保程序在遇到异常时能够正确处理,不会导致资源泄露或数据不一致等问题。以下是一些保障C++异常安全的手段和措施:1.RAII(资源获取即初始化)RAII是一种在C++中广泛使用的资源管理技术,它通过对象的构造函数获取......
  • 计及需求响应的改进灰狼优化算法求解风、光、柴、储容量优化配置(Matlab代码实现)
     ......
  • 【C++修行之道】string
    一.C语言中的字符串C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。二、标准库中的string类(了解)......
  • 【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的
    深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。一、深度学习算法与模型创新新型神经网络结构Transformer及其变种:近年来,Transformer......
  • C++入门(C语言过渡)
    文章目录前言一、C++关键字二、命名空间三、C++输入&输出四、缺省参数五、函数重载六、引用七、inline八、nullptr总结前言C++是一种通用的、高级的、静态类型的编程语言,它在20世纪80年代由丹尼斯·里奇创建的C语言基础上发展而来。以下是C++发展的一些重要里程碑。......
  • ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析
    概述论文地址:https://arxiv.org/pdf/2402.04615.pdf信息图表(图表、示意图、插图、地图、表格、文档布局等)能够将复杂的数据和想法转化为简单的视觉效果,因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线索使信息直观易懂。在当今日益数字化的世界中,移......
  • 算法金 | 时间序列预测真的需要深度学习模型吗?是的,我需要。不,你不需要?
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」参考论文:https://arxiv.org/abs/2101.02118更多内容,见微*公号往期文章:审稿人:拜托,请把模型时间序列去趋势!!使用Python快速上手LSTM模型预测时间序列1.时间序列预测......
  • 基于opencv + GPU cuda的光流算法demo
    该demo来自learnopencv.com网站,是作为opencvcuda模块的启蒙示例。看来这是一个简单的例子,但是由于从未接触过opencvcuda图像处理,我个人仍感觉比较新颖和有趣,特别是运行效果很惊奇,这里和大家一起学习解读以下。想看一手内容可以在网络直接搜索GettingStartedWithOpencvcuda......
  • 代码随想录算法训练营第27天 | 122.买卖股票的最佳时机 II 55. 跳跃游戏 1005.K次取反
    122.买卖股票的最佳时机II给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得的最大利润。解题:思路:最终利润是可......
  • R语言实现 Copula 算法建模相依性案例分析报告
    原文链接:http://tecdat.cn/?p=6193原文出处:拓端数据部落公众号 copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。Copula是建模和模拟相关随机变量的绝佳工具。Copula的主要吸引力在于,通过使用它们,你可以分别对相关结构和边缘(即每个随机变量的分布)进行建模。......