我正在尝试对struct
的向量进行排序,但它以错误结束。我试图根据C ++参考做到这一点,但我不知道问题出在哪里。有人能帮助我吗?
#include <cstdlib>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
/*
*
*/
struct reg{
string name;
string addr;
};
int main(int argc, char** argv) {
vector <reg> a;
reg newReg = { "John", "Street1"};
a.push_back(newReg);
reg newReg2 = { "Mike", "Street2"};
a.push_back(newReg2);
std::sort (a.begin(), a.end());
return 0;
}
答案 0 :(得分:4)
与int
,float
等内置类型不同,您必须为struct reg
定义比较函数,即您希望元素在排序时遵循的规则。像这样:
bool my_compare(const struct reg &x, const struct reg &y)
{
// define how to compare x,y here
}
然后,您可以传递此函数来对矢量进行排序:
std::sort (a.begin(), a.end(), my_compare);
答案 1 :(得分:0)
您必须重载比较运算符(小于,afair)或提供自定义比较函数。
答案 2 :(得分:0)
你需要告诉std :: sort是什么让结构的一个实例“小于”结构的另一个实例。
换句话说,如果我给你两个填充数据的结构实例,并问你“哪一个放在另一个之前?”,你的答案是什么?您过去接受该答案的规则是您需要编码并提供给std :: sort的3参数版本。