根据元素之一对结构向量进行排序

时间:2019-04-17 22:34:26

标签: c++ sorting structure

我正在编写一个程序,输入四个学科中n个学生的分数,然后根据总分数(来自codeforces.com:https://codeforces.com/problemset/problem/1017/A)确定其中一个的排名。我认为将标记存储在结构中将有助于跟踪各个主题。

现在,我所做的只是在检查总值的同时对向量进行冒泡排序。我想知道,有没有一种方法可以使用std::sort()仅基于结构的成员对向量进行排序?另外,我们如何使其下降?

这是现在的代码:

//The Structure
struct scores
{
    int eng, ger, mat, his, tot, rank;
    bool tommyVal;
};

//The Sort (present inside the main function)
    bool sorted = false;
    while (!sorted)
    {
        sorted = true;
        for (int i = 0; i < n-1; i++)
        {
            if (stud[i].tot < stud[i + 1].tot)
            {
                std::swap(stud[i], stud[i + 1]);
                sorted = false;
            }
        }
    }

只要您有兴趣,我就需要找到一个叫Thomas的学生的名衔。因此,为此,我将他的元素的tommyVal值设置为true,而将其他元素的值设置为false。这样,即使根据总标记对托马斯的标记进行排序后,即使向量中他的位置发生了变化,我也可以轻松找到它们。

很高兴知道std::swap()也可以交换整个结构。我想知道它还可以交换其他哪些数据结构。

1 个答案:

答案 0 :(得分:0)

std::sort()允许您为其提供谓词,以便您可以根据需要执行比较,例如:

std::sort(
  stud.begin(),
  stud.begin()+n, // <-- use stud.end() instead if n == stud.size() ...
  [](const scores &a, const scores &b){ return a.tot < b.tot; }
);

只需使用return b.tot < a.tot即可颠倒排序顺序。