如何对包含自定义(即用户定义)对象的 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);
}
};
你应该调用 sort as:
std::sort(vec.begin(), vec.end(),greater<MyStruct>());
关于c++ - 对自定义对象的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57854655/