使用std::sort() 依据元素的字段值对容器内元素排序
来源:互联网 发布:电力系统监控软件开发 编辑:程序博客网 时间:2024/06/18 06:53
有一个数据结构Point来描绘一个点,有两个数据成员x, y (都是int), 一个容器对象里边包含着多个Point对象,现在有一个需求就是根据元素x(y)值来重新进行排列。
算法很简单,std::sort() 就可以实现。
首先我们需要提供一个排序规则。这个规则就是一个可调用对象(一个全局函数、类静态成员函数、lambda 表达式(c++11))
调用std::sort();
举例说明:
#include <QCoreApplication>
#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/if.hpp>
#include <QDebug>
int add(int a, int b) {
return a + b;
}
struct Point {
Point(int x, int y) : x(x),y(y) {}
///[1]指定排序规则
static bool sToB(Point a, Point b){ return a.y < b.y; }
friend QDebug &operator<<(QDebug &outObj, const Point &obj);
friend bool comp(Point a, Point b);
private:
int x;
int y;
};
QDebug &operator<<(QDebug &outObj, const Point& obj) {
outObj << QString("[%1, %2]").arg(obj.x).arg(obj.y);
return outObj;
}
///[1]指定排序规则(或者)
bool comp(Point a, Point b) {
return a.x < b.x;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
boost::function<int (int, int)> callObj = boost::bind(add, _1, _2);
qDebug() << callObj(34, 66);
QList<Point> pointList;
pointList << Point(0, 110) << Point(0, 78) << Point(87, 67) << Point(78, 89);
///param3可以是类静态函数(进行排序 假如是字段为私有时)
std::sort(pointList.begin(), pointList.end(), Point::sToB);
qDebug() << pointList;
///param3可以是全局函数
std::sort(pointList.begin(), pointList.end(), comp);
qDebug() << pointList;
///param3还可以是lambda(c++11 支持)
return a.exec();
}
阅读全文
0 0
- 使用std::sort() 依据元素的字段值对容器内元素排序
- 对容器元素重新排序的算法
- 对容器元素进行排序
- 依据对象元素的某个参数对List进行排序算法
- Go语言:使用sort包对任意类型元素的集合进行排序
- Java中使用Collections.sort对List里面的元素排序示例
- 使用std::sort对struct object排序
- 《C++ Primer》Page400,对容器元素重新排序的算法
- Collections.sort 依据多个字段排序
- stl容器内指针元素的使用与释放
- python——使用itemgetter和sorted对列表内的元素进行排序
- 对list中的对象进行求最大值和以及排序,针对对象的某一个元素为依据
- 禁用/启用容器内的所有元素
- 删除顺序容器内元素的操作
- 删除两个容器内相同的元素
- 容器放置元素(对象)后再对该元素进行操作能否改变容器中元素的值
- C# WF 遍历获取容器内的子元素并进行重新排序
- STL_算法_对所有元素排序(sort、stable_sort)
- CXF集成swagger
- 单身的程序猿们,只能帮你到这里了……
- 深入理解java虚拟机:JVM高级特性与最佳实践第一部分走近Java第1章走近Java
- Android5.1中联系人新建和保存机制
- 进程管理API之kernel_thread
- 使用std::sort() 依据元素的字段值对容器内元素排序
- 静态顺序表的实现(数组实现)
- cookie
- 策略模式
- 安卓文件存储权限管理三种目录
- 【数据结构】【范浩强treap】
- 一个web项目web.xml的配置中<context-param>配置作用
- PAT乙级 1014. 福尔摩斯的约会 C语言
- Android Studio 快捷键中英文对译