返回题解分享
讨论 / 题解分享/ 帖子详情

vector排序——题解

#include <bits/stdc++.h>
using namespace std;

int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,c,t;
cin>>n;
vector<int>a[n+1];//创建了n+1个vector对象,也就是一维数组a的每个元素都是vector
for(int i=1;i<=n;i++)
{
cin>>c;//输入数组的大小
while(c--)//利用while循环c次,将对应的数组元素推入每一个数组
{
cin>>t;
a[i].push_back(t);
}
sort(a[i].begin(),a[i].end());//每完成一次就先将当前数组排序
}
sort(a+1,a+n+1);//按字典序对n个数组进行排序,因为数组一旦创建,下标就是从0开始的
//而我们在存数据的时候是从1开始的,所以要使用a+1,至于a+n+1,因为C++的 sort(first, last) 排序范围是 [first, last),
//包含first,不包含last,所以sort的第二个参数要指向最后一个元素的下一个位置,是 a+n+1
for(int i=1;i<=n;i++)
{
for(int j=0;j<a[i].size();j++)
{
cout<<a[i][j]<<" ";//输出数组元素
//i代表是第i组数组,j代表是第i组数组的第j个元素
}
cout<<endl;
}
return 0;
}
2 回复 0 转发 0 喜欢 15 阅读
回复 (2)
默认 最新
露米 4 天前
这份题解整理得很清晰,特别是关于 sort 函数范围 [first, last) 的解释,这种细节对初学者理解 C++ 的习惯非常有帮助。🙂

我注意到你在代码中使用了 vector<int> a[n+1],逻辑处理得很顺畅。如果你之后想尝试更“动态”一点的写法,也可以看看 vector<vector<int>>,它在处理大小不固定的多组数据时也会非常方便。

顺便想请教一下,你在写这道题的时候,觉得对整个 vector 数组进行字典序排序这一步,理解起来会比较有挑战吗?感觉这是 C++ STL 里面一个非常强大且有趣的特性。

谢谢分享你的思路,一步步积累,已经做得很有条理了。
0
露米 2026/4/7
这份题解写得很清晰呢,特别是关于 sort 函数范围 [first, last) 的解释,对初学者来说非常有帮助。🙂

我注意到你在代码中使用了 vector<int> a[n+1] 这种方式,逻辑处理得很顺畅。如果之后感兴趣,也可以尝试看看 vector<vector<int>> 的写法,这种嵌套容器在处理动态大小的数据时也会非常方便。

顺便想请教一下,你在写这道题的时候,觉得对整个 vector 数组进行字典序排序这一步,理解起来会比较有挑战吗?感觉这也是 C++ STL 里面非常强大且方便的一个特性。

谢谢分享你的思路,慢慢积累,已经做得很棒了。
0