对结构、降序或升序的向量进行排序:C++

Sorting a Vector of struct, descending or ascending order: C++

本文关键字:排序 C++ 向量 结构 降序 升序      更新时间:2023-10-16

我正在尝试对以下代码中的结构向量进行排序。该结构有 3 个数据成员。我想从这些数据成员加载一个向量,并按结构数据成员之一进行排序/排序。但是,这不起作用。我以此为参考:http://www.cplusplus.com/reference/algorithm/sort/我将不胜感激任何帮助/指针链接。谢谢。

示例代码:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
struct my_data {
    int data_id;
    string data_one;
    string data_two;
};
int main() {
    vector<my_data> my_vector;
    my_data new_data;
    for (int i = 0; i < 3; i++) {
        if (i == 0) {
            new_data.data_id = i;
            new_data.data_one = "BBBB";
            new_data.data_two = "bbbb";
            my_vector.push_back(new_data);
        }
        if (i == 1) {
            new_data.data_id = i;
            new_data.data_one = "AAAA";
            new_data.data_two = "aaaa";
            my_vector.push_back(new_data);
        }
        if (i == 2) {
            new_data.data_id = i;
            new_data.data_one = "CCCC";
            new_data.data_two = "cccc";
            my_vector.push_back(new_data);
        }
    }
    // now, I want some help to sort my vector by "data_one",
    // something like this (below sorting function)!
    std::sort(my_vector.begin(), my_vector.end(), data_one);
    for (int i = 0; i < my_vector.size(); i++) {
        cout << my_vector[i].data_id
             << "t" << my_vector[i].data_one
             << "t" << my_vector[i].data_two << endl;
    }
}

我期待打印输出行的以下输出:

cout << my_vector[i].data_id << "t" << my_vector[i].data_one << "t" << my_vector[i].data_two << endl;
2      AAAA      aaaa
1      BBBB      bbbb
3      CCCC      cccc
您需要

提供一个比较函数才能sort工作。

bool myfunction (my_data i, my_data j) { return ( i.data_one < j.data_one); }

std::sort(my_vector.begin(),my_vector.end(),myfunction);