C++ sort vector > or vector 容器的排序

时间:2022-09-19 23:27:15

C++的STL中提供了很强大的排序函数sort,可以对任意数组,结构体及类进行排序,下面我们先来看最简单的数组排序。默认的升序排列,我们也可以在后面加上less或greater来告诉编译器我们想要的排序顺序。

vector<int> v = {, , , , , , };

// Ascending order
sort(v.begin(), v.end());
sort(v.begin(), v.end(), less<int>()); // Descending order
sort(v.rbegin(), v.rend());
sort(v.begin(), v.end(), greater<int>());

如果是一个二维数组,也可以是用sort,我们可以选择根据某一列来进行排序,如果我们不重写cmp函数,那么默认的是根据第一列来排序,当然我们可以通过重写来根据其他列来排序:

/* Input matrix
m = [
1 4 2
0 8 3
3 5 1
]
*/ // Ascending order by first column
sort(m.begin(), m.end());
/*
m = [
0 8 3
1 4 2
3 5 1
]
*/ // Descending order by first column
sort(m.rbegin(), m.rend());
/*
m = [
3 5 1
1 4 2
0 8 3
]
*/ // Ascending order by second column
sort(m.begin(), m.end(), [](const vector<int> &a, const vector<int> &b) { return a[] < b[]; } ); bool cmp(const vector<int> &a, const vector<int> &b) {
return a[] > b[];
}
sort(m.begin(), m.end(), cmp);
/*
m = [
1 4 2
3 5 1
0 8 3
]
*/ // Descending order by second column
sort(m.begin(), m.end(), [](const vector<int> &a, const vector<int> &b) { return a[] > b[]; } ); bool cmp(const vector<int> &a, const vector<int> &b) {
return a[] < b[];
}
sort(m.begin(), m.end(), cmp);
/*
m = [
0 8 3
3 5 1
1 4 2
]
*/

下面来看如何给class排序,我们将自定义的类class装入到容器vector中,然后根据class中的一个参数为依据进行排序,这里分两种情况,一个是vector中装指针的class,一种的装正常的class,它们再重写cmp比较函数上有些区别的,参见代码如下:

class A {
public:
int a1, a2;
A(int m, int n): a1(m), a2(n) {}
}; class B {
public:
int b1, b2;
B(int m, int n): b1(m), b2(n) {}
}; bool cmp1(A const *a, A const *b) {
return a->a1 < b->a1;
} bool cmp2(B const &a, B const &b) {
return a.b1 < b.b1;
} void printArray(vector<A*> array) {
for (int i = ; i < array.size(); ++i) {
cout << array[i]->a1 << " " << array[i]->a2 << endl;
}
cout << endl;
} void printArray2(vector<B> array) {
for (int i = ; i < array.size(); ++i) {
cout << array[i].b1 << " " << array[i].b2 << endl;
}
cout << endl;
} int main() { vector<A*> array;
array.push_back(new A(, ));
array.push_back(new A(, ));
array.push_back(new A(, ));
array.push_back(new A(, ));
array.push_back(new A(, ));
array.push_back(new A(, )); printArray(array);
sort(array.begin(), array.end(), cmp1);
printArray(array); vector<B> array2;
array2.push_back(B(, ));
array2.push_back(B(, ));
array2.push_back(B(, ));
array2.push_back(B(, ));
array2.push_back(B(, ));
array2.push_back(B(, )); printArray2(array2);
sort(array2.begin(), array2.end(), cmp2);
printArray2(array2); return ;
}

C++ sort vector<vector<int> > or vector<MyClass> 容器的排序的更多相关文章

  1. const vector&lt&semi;int&gt&semi; 和 vector&lt&semi;const int&gt&semi;问题讨论

    1.const vector <int> vec(10) —— 与const int a[10]是一回事,意思是vec只有10个元素,不能增加了,里面的元素也是不能变化的 vector&l ...

  2. CodeForces - 93B&lpar;贪心&plus;vector&lt&semi;pair&lt&semi;int&comma;double&gt&semi; &gt&semi;&plus;double 的精度操作

    题目链接:http://codeforces.com/problemset/problem/93/B B. End of Exams time limit per test 1 second memo ...

  3. vector向量容器元素排序与查找

    1.利用标准库函数sort()对vector进行排序 参考源码: #include <algorithm> #include <vector> vector<int&gt ...

  4. 实战c&plus;&plus;中的vector系列--再谈vector的insert&lpar;&rpar;方法&lpar;都是make&lowbar;move&lowbar;iterator惹的祸&rpar;

    之前说过了关于vector的insert()方法,把vector B的元素插入到vector A中.vector A中的结果我们可想而知,可是vector B中的元素还会怎样? 看看之前写过的程序: ...

  5. 实战c&plus;&plus;中的vector系列--正确释放vector的内存&lpar;clear&lpar;&rpar;&comma; swap&lpar;&rpar;&comma; shrink&lowbar;to&lowbar;fit&lpar;&rpar;&rpar;

    关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了. 是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为 ...

  6. Java中Array&period;sort&lpar;&rpar;的几种用法(需要初始化要排序的对象)

    ====================================================== 1.Arrays.sort(int[] a) 这种形式是对一个数组的所有元素进行排序,并且 ...

  7. 使用泛型实现对int数组或者String数组进行排序

    因为是使用的泛型,我们并不确定数据类型, 对于数据的比较就不能用平时的大于或者小于. 我们需要比较对象实现Comparable接口,该接口下的compareTo()方法可以用来比大小 定义Sort类: ...

  8. Codeforces Global Round 6D(VECTOR&lt&semi;ARRAY&lt&semi;INT&comma;3&gt&semi; &gt&semi;)

    一个人只要存在债务关系,那么他的债务可以和这整个债务关系网中任何人连边,和他当初借出或欠下的人没有关系.只需要记录他的债务值即可. #define HAVE_STRUCT_TIMESPEC #incl ...

  9. hdu 4557 非诚勿扰 vector的应用 原来vector 可以删除指定位置元素 不过消耗大

    非诚勿扰 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submi ...

随机推荐

  1. &period;NET FRAMEWORK版本&colon;4&period;0&period;30319&semi; ASP&period;NET版本&colon;4&period;6&period;118&period;0

    https://gqqnbig.me/2015/11/23/net-framework%e7%89%88%e6%9c%ac4-0-30319-asp-net%e7%89%88%e6%9c%ac4-6- ...

  2. python 3编码

    python 3和2很大区别就是python本身改为默认用unicode编码. 字符串不再区分"abc"和u"abc", 字符串"abc"默 ...

  3. Google Authentication 机制原理

    Google Authenticator,谷歌身份认证器,Google公司推出的一款动态口令工具,旨在解决大家Google账户遭到恶意攻击的问题.该工具主要基于TOTP(Time-Based One- ...

  4. Farey Sequence

    Description The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rationa ...

  5. css3动画实例

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. MapReduce运行时出现java&period;lang&period;NoClassDefFoundError

    最近在编写MapReduce程序时遇到了一个错误,错误提示信息为: Error: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.H ...

  7. winform —— 常用控件

    1.textbox: 属性:text:    文本selectedtext:         获或设置选中文本canundo:         是否能够撤销 passwordchar:替换字符实现密码 ...

  8. dojo单柱状图

    dojo单柱状图 1.dojo单柱状图源码 column.html: <!DOCTYPE HTML> <html lang="en"> <head&g ...

  9. Nginx 参数配置相关

    Nginx参数配置相关 by:授客 QQ:1033553122 目的: 对Nginx配置的点滴学习总结,主要目的在于分析Nginx与性能相关的一些参数设置,以便性能调优时选择最优配置   环境: $ ...

  10. django的RestFramework模块的源码分析

    一.APIView源码分析 查看源码的前提要知道,找函数方法必须先在自己的类中找,没有再往父类找,一层一层网上找,不能直接按ctrl点击 在我们自己定义的类中没有as_view方法的函数,所以肯定是继 ...