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

标签 c++ stl sorting

如何对包含自定义(即用户定义)对象的 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/

相关文章:

JavaScript 自定义排序函数来确定字母的优先级

java - Hadoop Map Reduce - 如何将分组与排序分开?

c++ - NetUIHWND 和 DirectUIHWND

c# - 将 _WTSClient 结构从 C++ 转换为 C#

c++ - 代码块中不包含 iostream 库

javascript - 使用 StupidTable JS 和日期列进行排序

c++ - 在 C++ 中,结构是如何在内存中布局的?

c++ - std::vector size()-1 是否总是给出最后一个元素的索引?

c++ - 传递对 STL vector 中偏移位置的引用

c++ - std::array<T, 0> 的目的是什么?