如何对struct C ++的向量进行排序

时间:2014-03-17 16:45:18

标签: c++ sorting vector struct

我正在尝试对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;
}

3 个答案:

答案 0 :(得分:4)

intfloat等内置类型不同,您必须为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参数版本。