1
bazingaterry 2015-07-27 19:41:17 +08:00
依稀记得 sort() 可以有第二个参数的,你写一个比较函数就可以了。
|
2
zoudm 2015-07-27 19:47:22 +08:00 1
放在一个struct S里面,比如是一个int i和char c。然后你有一个S s[100];
然后两种办法: 1重载这个这个struct的小于号,bool operator < (const S & c) const { return i < c.i; }。然后使用sort来对其排序 2定义一个函数bool comp(S &a, S &b) { return a.i < b.i; } 然后在sort的时候使用sort(s, s+100, comp),作为第三个参数传comp这个函数进去。 |
3
bazingaterry 2015-07-27 19:58:23 +08:00
@bazingaterry 不好意思,是第三个参数。
二楼正解! |
4
publicID001 2015-07-27 20:50:17 +08:00
pair自带比较,可直接sort
|
5
towser 2015-07-28 13:24:00 +08:00
与你头像相映成趣
|
6
morefreeze 2015-07-28 14:03:44 +08:00
struct node{ int a,b; };
node arr[100]; bool cmp(const node& lhs, const node& rhs){ return lhs.a < rhs.a; } sort(arr, arr+sizeof(arr)/sizeof(arr[0]), cmp); |
7
canautumn 2015-07-28 15:00:21 +08:00
4楼正解,不需要函数指针和结构体,做成pair就行了
还有一种更通用的办法(超过2组数据,不需要额外的数据结构)就是取得数组a排序的index,然后任意数组按b[indexes[i]]来访问就行了: double a[10]= {...}; double b[10]= {...}; int indexes[10]; std::iota(std::begin(indexes), std::end(indexes), 0); std::sort(std::begin(indexes), std::end(indexes), [&a] (int i, int j) { return a[i] < a[j]; }); |