如何对结构体中的向量进行排序

How to sort vector of struct C++

本文关键字:向量 排序 结构体      更新时间:2023-10-16

我试图对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;
}

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);  

您必须重载比较操作符(小于,事务)或提供自定义比较函数。

您需要告诉std::sort是什么使结构体的一个实例"小于"该结构体的另一个实例。

换句话说,如果我给你两个充满数据的结构体的实例,然后问你"哪个放在另一个前面?",你的答案是什么?您用来得到答案的规则是您需要编写的代码,并给出std::sort的3个参数版本。