C++中如何用STL的sort()对二维数组排序
用sort直接对二维数组排序,还请告诉我一下吧,感激不尽!!比如inta[1000][3];根据a[i][0]作为关键码对a排序。即每次交换a[i][0],a[i][1]...
用sort 直接对 二维数组排序,还请告诉我一下吧,感激不尽!!
比如 int a[1000][3]; 根据 a[i][0] 作为关键码 对a排序。
即每次交换 a[i][0],a[i][1],a[i][2]三个元素
我再说下我的意图把, 例子:
int a[5][3];
a[0]={2,5,2};
a[1]={5,4,2};
a[2]={3,1,6};
a[3]={1,8,2};
a[4]={0,4,4};
我想得到结果 :
a[0] = {0,4,4}; // 原来的 a[4]
a[1] = {1,8,2}; // 原来的 a[3]
a[2] = {2,5,2}; // 原来的 a[0]
a[3] = {3,1,6}; // 排序后 按 a[i][0] (0<=i<5)递增的顺序。
a[4] = {5,4,2};
顺便说一下,夜の协奏曲 你的代码通不过,我用的是 VS 2008 。提示错误:
错误 2 error C2106: “=”: 左操作数必须为左值 c:\program files\microsoft visual studio 9.0\vc\include\algorithm 3131 The C++ Programming test 2
明日青蛙 你的代码会是提示同样的错误!
最后补一句 ,谁要是写出代码,并调试成功了,我会再追加 100 分的。 展开
比如 int a[1000][3]; 根据 a[i][0] 作为关键码 对a排序。
即每次交换 a[i][0],a[i][1],a[i][2]三个元素
我再说下我的意图把, 例子:
int a[5][3];
a[0]={2,5,2};
a[1]={5,4,2};
a[2]={3,1,6};
a[3]={1,8,2};
a[4]={0,4,4};
我想得到结果 :
a[0] = {0,4,4}; // 原来的 a[4]
a[1] = {1,8,2}; // 原来的 a[3]
a[2] = {2,5,2}; // 原来的 a[0]
a[3] = {3,1,6}; // 排序后 按 a[i][0] (0<=i<5)递增的顺序。
a[4] = {5,4,2};
顺便说一下,夜の协奏曲 你的代码通不过,我用的是 VS 2008 。提示错误:
错误 2 error C2106: “=”: 左操作数必须为左值 c:\program files\microsoft visual studio 9.0\vc\include\algorithm 3131 The C++ Programming test 2
明日青蛙 你的代码会是提示同样的错误!
最后补一句 ,谁要是写出代码,并调试成功了,我会再追加 100 分的。 展开
8个回答
展开全部
本身sort()函数并不是针对快速排序排的,它不会叫你指定一个关键码,对a排序,如果需要指定关键码的话,只能是自己写代码。我本身并不清楚你的意思,如果是说要分别对a[x][0],a[x][1],a[x][2]进行排序,其实自己可以编写一个函数,这里给出函数的代码:
void sort(int p[1000][3]) {//其实这里p完全可以写**p,但是由于这样清
//晰,所以还是这样写。
for(int i = 0; i < 1000; ++i)
sort(&p[i][0],&p[i][3]);
}
其实这样的代码还可以进行模板化,比如说你要对a[x][y]数组进行排序,可以这样写:
template <int a,int b,typename type>
void sort(type p[a][b]) {
for(int i = 0; i < x; ++i)
sort(&p[i][0],&p[i][j]);
}
以后可以如是调用代码:
sort <1000,3>(a);
即可。
==================================================================
C++ 提倡使用 标准模板库(STL)
void sort(int p[1000][3]) {//其实这里p完全可以写**p,但是由于这样清
//晰,所以还是这样写。
for(int i = 0; i < 1000; ++i)
sort(&p[i][0],&p[i][3]);
}
其实这样的代码还可以进行模板化,比如说你要对a[x][y]数组进行排序,可以这样写:
template <int a,int b,typename type>
void sort(type p[a][b]) {
for(int i = 0; i < x; ++i)
sort(&p[i][0],&p[i][j]);
}
以后可以如是调用代码:
sort <1000,3>(a);
即可。
==================================================================
C++ 提倡使用 标准模板库(STL)
展开全部
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
bool cmp(int *p,int *q)
{
if(p[0]==q[0])
{
if(p[1]==q[1])
{
return p[2]<q[2];
}
else return p[1]<q[1];
}
else return p[0]<q[0];
}
int main()
{
srand(time(0));
int i;
int **a=new int*[1000];
for(i=0;i<1000;++i)
{
a[i]=new int[3];
a[i][0]=rand()%1000;
a[i][1]=rand()%1000;
a[i][2]=rand()%1000;
//printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}
sort(a,a+1000,cmp);
/*cout<<"After sort"<<endl;
for(i=0;i<1000;++i)
{
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}*/
return 0;
}
#include <algorithm>
#include <ctime>
using namespace std;
bool cmp(int *p,int *q)
{
if(p[0]==q[0])
{
if(p[1]==q[1])
{
return p[2]<q[2];
}
else return p[1]<q[1];
}
else return p[0]<q[0];
}
int main()
{
srand(time(0));
int i;
int **a=new int*[1000];
for(i=0;i<1000;++i)
{
a[i]=new int[3];
a[i][0]=rand()%1000;
a[i][1]=rand()%1000;
a[i][2]=rand()%1000;
//printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}
sort(a,a+1000,cmp);
/*cout<<"After sort"<<endl;
for(i=0;i<1000;++i)
{
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}*/
return 0;
}
参考资料: 这样应该可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很简单~~~
bool rule(int a[3],int b[3])
{
return a[0]<b[0];//这里使用从小到大排列
}
sort(a,a+n,rule);//n表示有多少个a[3],rule是自定义规则,rule的名字可以随便取,类型也可以随便定~~但是最好使用int和bool~~~这种排序的方法也可以应用到结构体中去~~~
bool rule(int a[3],int b[3])
{
return a[0]<b[0];//这里使用从小到大排列
}
sort(a,a+n,rule);//n表示有多少个a[3],rule是自定义规则,rule的名字可以随便取,类型也可以随便定~~但是最好使用int和bool~~~这种排序的方法也可以应用到结构体中去~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
sort()里面可以填两个或者三个参数 第一个是开始 结束 第三个是判断条件 判断条件可以写成个函数 一般直接应该是不可以的,或者我没想到 你可以把第想要的行或者列 用一个指针数组保存起来 用sort对指针数组排序 结果你懂的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <algorithm>
#include <ctime>
using namespace std;
bool cmp(int *p,int *q)
{
if(p[0]==q[0])
{
if(p[1]==q[1])
{
return p[2]<q[2];
}
else return p[1]<q[1];
}
else return p[0]<q[0];
}
int main()
{
srand(time(0));
int i;
int **a=new int*[1000];
for(i=0;i<1000;++i)
{
a[i]=new int[3];
a[i][0]=rand()%1000;
a[i][1]=rand()%1000;
a[i][2]=rand()%1000;
//printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}
sort(a,a+1000,cmp);
/*cout<<"After sort"<<endl;
for(i=0;i<1000;++i)
{
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}*/
return 0;
}
#include <algorithm>
#include <ctime>
using namespace std;
bool cmp(int *p,int *q)
{
if(p[0]==q[0])
{
if(p[1]==q[1])
{
return p[2]<q[2];
}
else return p[1]<q[1];
}
else return p[0]<q[0];
}
int main()
{
srand(time(0));
int i;
int **a=new int*[1000];
for(i=0;i<1000;++i)
{
a[i]=new int[3];
a[i][0]=rand()%1000;
a[i][1]=rand()%1000;
a[i][2]=rand()%1000;
//printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}
sort(a,a+1000,cmp);
/*cout<<"After sort"<<endl;
for(i=0;i<1000;++i)
{
printf("%d\t%d\t%d\n",a[i][0],a[i][1],a[i][2]);
}*/
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询