网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
template<typename _RandomAccessIterator, typename _Compare>
inline void
sort(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Compare __comp)
{...}
- 你只需要指定开始、结束的迭代器
- 比较方法__comp
下面是一个简单的案例
/\*\*二维数组第一列升序,第一列相同第二列降序 \*/
vector<vector<int>> v = {{5, 4}, {6, 4}, {6, 7}, {2, 3}, {5, 2}, {1, 8}};
sort(v.begin(), v.end(), [](const vector<int> &a, const vector<int> &b) { return a[0] == b[0] ? b[1] < a[1] : a[0] < b[0]; });
for(const auto& e : v){
for(const auto& i : e) {
cout << i << ", ";
}
cout << '\n';
}
下面是输出,可以看出,第一列升序,第一列相同第二列降序
1, 8,
2, 3,
5, 4,
5, 2,
6, 7,
6, 4,
对于通用算法,它的适用性很强,多维也是可以的,只要想好__comp
,这里直接用lambda即可
- 参数是两个一维数组,一般都是const引用,避免拷贝!!相当于第一次比较的是两个数组{5, 4}, {6, 4}
- 之后简单的写出比较方式,返回值是bool,不能在谓词写一些无关的语句,这里只有一个return表示比较方式。
2 C 二维数组第一列升序,第一列相同第二列降序
C语言库函数qsort也是可以的,它也可以使用二维或者高维,但是比较函数必须自己写
extern void qsort (void \*__base, size_t __nmemb, size_t __size,
__compar_fn_t __compar);
- __base 表示待比较的数组首地址,当然就是数组名咯
- __nmemb 表示数组的第一维的大小,对于二维数组就是有多少行,
sizeof(v2) / sizeof(v2[0]),也就是6个
- __size 表示一个数组的大小,也就是每行的大小,
sizeof(v2[0]),也就是2个int大小的存储
- __compar比较方法,必须是如下形式
typedef int (\*__compar_fn_t) (const void \*, const void \*);
这是一个别名,对于函数指针的别名,直接去掉typedef(不像一般的别名书写的形式)
,如下,也就是__compar_fn_t表示两个const void*的形参,返回值是int的函数
。
int (\*__compar_fn_t) (const void \*, const void \*);
下面是一个案例
int cmp(const void\* a, const void\* b) {
return ((int\*)a)[0] == ((int\*)b)[0] ? ((int\*)b)[1] > ((int\*)a)[1] : ((int\*)a)[0] > ((int\*)b)[0];
}
int v2[6][2] = {{5, 4}, {6, 4}, {6, 7}, {2, 3}, {5, 2}, {1, 8}};
int hang = sizeof(v2) / sizeof(v2[0]);


**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.youkuaiyun.com/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
pics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**