Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对结构C+的向量进行排序+;_C++_Sorting_Vector_Struct - Fatal编程技术网

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