首页 > 解决方案 > 排序值应按其名称显示

问题描述

我希望显示器上显示的所有数字都链接到它们旁边的名称。排序后的数字不应该像现在一样显示在右侧的列表中,而是显示名称(NPC 和 PC - 标签)。它是如何工作的?

int iniwerte[7];  // Array for the values by my LCD-displays
   
ui->lcdNumber_initiative_1->display(iniwerte[0]); // Each display got a value

ui->lcdNumber_initiative_2->display(iniwerte[1]);
ui->lcdNumber_initiative_3->display(iniwerte[2]);
ui->lcdNumber_initiative_4->display(iniwerte[3]);
ui->lcdNumber_initiative_5->display(iniwerte[4]);

std::sort(&iniwerte[0], &iniwerte[7], std::greater<int>()); // Sorting values  

ui->reihenfolge->setNum(iniwerte[0]); // Sorted numbers are shown on the labels
ui->reihenfolge_2->setNum(iniwerte[1]);
ui->reihenfolge_3->setNum(iniwerte[2]);
ui->reihenfolge_4->setNum(iniwerte[3]);
ui->reihenfolge_5->setNum(iniwerte[4]);

正确的列表应该显示相关的名称而不是数字。

这是一个例子

在此处输入图像描述

标签: c++arraysqtsorting

解决方案


  1. 定义结构。
struct label_val
{
    std::string label;
    int value;
}
  1. 通过重载大于运算符以根据标签进行比较,提供对该结构进行排序的规则。请参阅运算符重载的基本规则和习惯用法是什么?有关运算符重载的更多信息和智慧。
bool operator> (const label_val& lhs,
                const label_val& rhs)
{
    return lhs.label > rhs.label;
}
  1. 做一个 s 的容器label_val。用作std::array示例,因为它最接近int iniwerte[7];.
std::array<label_val, 7> iniwerte;
  1. 填写iniwerte最适合您的应用程序。
  2. 对吸盘进行排序。
std::sort(iniwerte.begin(), iniwerte.end(), std::greater<int>());

推荐阅读