gpt4 book ai didi

c++ - 对自定义对象的 vector 进行排序

转载 作者:IT老高 更新时间:2023-10-28 11:26:09 33 4
gpt4 key购买 nike

如何对包含自定义(即用户定义)对象的 vector 进行排序。
可能应该使用标准 STL 算法 sort 以及一个谓词(函数或函数对象),该谓词将在自定义对象中的一个字段(作为排序键)上进行操作。
我在正确的轨道上吗?

最佳答案

使用 std::sort 的简单示例

struct MyStruct
{
int key;
std::string stringValue;

MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}
};

struct less_than_key
{
inline bool operator() (const MyStruct& struct1, const MyStruct& struct2)
{
return (struct1.key < struct2.key);
}
};

std::vector < MyStruct > vec;

vec.push_back(MyStruct(4, "test"));
vec.push_back(MyStruct(3, "a"));
vec.push_back(MyStruct(2, "is"));
vec.push_back(MyStruct(1, "this"));

std::sort(vec.begin(), vec.end(), less_than_key());

编辑: 正如 Kirill V. Lyadvinsky 指出的那样,您可以实现 operator<,而不是提供排序谓词。对于 MyStruct :

struct MyStruct
{
int key;
std::string stringValue;

MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

bool operator < (const MyStruct& str) const
{
return (key < str.key);
}
};

使用此方法意味着您可以简单地对 vector 进行如下排序:

std::sort(vec.begin(), vec.end());

Edit2: 正如 Kappa 建议的那样,您还可以通过重载 > 来按降序对 vector 进行排序。运算符和改变排序的调用:

struct MyStruct
{
int key;
std::string stringValue;

MyStruct(int k, const std::string& s) : key(k), stringValue(s) {}

bool operator > (const MyStruct& str) const
{
return (key > str.key);
}
};

您应该将排序称为:

std::sort(vec.begin(), vec.end(),greater<MyStruct>());

关于c++ - 对自定义对象的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380463/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com