C++ 如何对结构C+的向量进行排序+;
我试图对C++ 如何对结构C+的向量进行排序+;,c++,sorting,vector,struct,C++,Sorting,Vector,Struct,我试图对struct的向量进行排序,但它以错误结束。我试着按照C++的引用来做,但我不知道问题在哪里。有人能帮我吗 #include <cstdlib> #include <string> #include <iostream> #include <vector> #include <algorithm> using namespace std; /* * */ struct reg{ string name;
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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
/*
*
*/
结构注册{
字符串名;
字符串地址;
};
int main(int argc,字符**argv){
载体a;
reg newReg={“约翰”,“街1号”};
a、 推回(newReg);
reg newReg2={“Mike”,“Street2”};
a、 推回(newReg2);
排序(a.begin(),a.end());
返回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);
与
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);
您必须重载比较运算符(小于,afair)或提供自定义比较函数。您必须重载比较运算符(小于,afair)或提供自定义比较函数。您需要告诉std::sort是什么使结构的一个实例“小于”结构的另一个实例
换句话说,如果我给你两个充满数据的结构实例,问你“哪一个放在另一个之前”,你的答案是什么?这个答案所使用的规则是您需要编码的内容,并提供给3参数版本的std::sort。您需要告诉std::sort是什么使一个结构实例“小于”另一个结构实例
换句话说,如果我给你两个充满数据的结构实例,问你“哪一个放在另一个之前”,你的答案是什么?答案中的规则是您需要编码的,并提供给3参数版本的std::sort。您能详细说明所述错误吗?您能详细说明所述错误吗?方法
my\u compare
可能会返回一个int。谓词函数只对分区而不是排序有用。@NickC:嗯,不?std::sort
的第三个参数是谓词函数。。。“返回如果第一个参数[在]第二个元素之前,则为true。比较函数的签名应等效于以下内容:布尔cmp(常数类型1&a,常数类型2&b);
“@MooingDuck I stand corrected。我责怪我的新工作是使用返回int的C。生锈的速度比我想象的要快。@NickC是的,C确实需要一个int
:p方法my_compare
可能会返回一个int。谓词函数只对分区而不是排序有用。@NickC:Um,不是吗?std::sort
的第三个参数是谓词函数。。。“返回如果第一个参数[在]第二个元素之前,则为true。比较函数的签名应等效于以下内容:布尔cmp(常数类型1&a,常数类型2&b);
“@MooingDuck I stand corrected。我责怪我的新工作是使用返回int的C。生锈的速度比我想象的要快。@NickC是的,C确实需要一个int
:P