如何按类属性对 c++ 向量数组进行排序
How can i sort c++ vector array by class property
我有一个元素类型的向量数组。现在如何根据每个元素的中心值与 100 的距离按升序对数组进行排序?
在这种情况下,生成的 Elements 矢量数组将导致矢量数组被排序
,如下所示...元素排序:
Elements.push_back(Element(77));
Elements.push_back(Element(128));
Elements.push_back(Element(20));
Elements.push_back(Element(-370));
Elements.push_back(Element(-489));
法典:
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
class Element
{
public:
int Center;
Element(int center)
{
Center = center;
}
};
int main(int)
{
cout << "Start...n";
vector<Element> Elements;
// add test objects
Elements.push_back(Element(20));
Elements.push_back(Element(-370));
Elements.push_back(Element(128));
Elements.push_back(Element(77));
Elements.push_back(Element(-489));
//cout << "value of a: " << Elements.size() << endl;
for (vector<Element>::size_type i = 0; i != Elements.size(); i++) {
cout << "value of a: " << Elements[i].Center << endl;
}
return 0;
}
下面是这里的例子:
// sort using a lambda expression
std::sort(s.begin(), s.end(), [](int a, int b) {
return b < a;
});
您提供了一个 lambda,该 lambda 提供了有关您正在排序的条件的逻辑。在您的情况下,条件将处理Center
变量。 a
和b
是向量中要比较的任意两个元素。
在您的情况下,您的将如下所示(我目前不在编译器进行测试,您的排序逻辑的细节可能与我理解的不同):
std::sort(Elements.begin(), Elements.end(), [](Element a, Element b) {
return abs(100 - b.Center) > abs(100 - a.Center);
});
考虑到你的示例是错误的(77 应该在 128 之前),你可能想使用这样的std::sort
:
std::sort(Elements.begin(), Elements.end(), [](const Element& a, const Element& b) {
return std::abs(100 - a.Center) < std::abs(100 - b.Center);
});
这里的问题是,如果你有:75和125,它将把75放在第一位(如果首先插入),正如James Adkison所指出的那样。
现场示例
相关文章:
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为