c++ - 在 C++ 中对多个链接数组进行排序

标签 c++ sorting

这个问题在这里已经有了答案:





Sorting two corresponding arrays

(4 个回答)


4年前关闭。




考虑以下列表:

Name   Price(per kg)  Weight(in kg)

rice1       40          20
rice2       50          27
rice3       35          24

我希望所有大米类型都根据它们的值(value)进行分类。所以,我对它们进行排序。
new sorted price: 35 40 50

现在我打印它们和输出如下:
Name  Price  Weight

rice1   35    20
rice2   40    27
rice3   50    24

但这不是我想要的。我希望它像这样打印:
Name   Price  Weight

rice3   35    24
rice1   40    20
rice2   50    27

所以,问题是我得到了排序列表中的值,而不是名称和权重。我想根据值(value)对所有东西进行排序。
我怎样才能做到这一点?

我编写了以下代码。但不确定下一步该怎么做。
#include <iostream>
#include <string>
#include <algorithm>

int main()
{
    class treasure
    {
        public:
            std::string name[100];
            double value[100];
            double weight[100];
    };

    int itemNumber, totalWeight, i;

    treasure item;

    std::cout << "Enter total item weight(in kg): " << std::endl;
    std::cin >> totalWeight;
    std::cout << std::endl <<"Enter total item number: " << std::endl;
    std::cin >> itemNumber;

    //take item name, item value, item weight
    for( i = 0; i < itemNumber; i++)
    {
        std::cout << std::endl << "Enter item name: " << "\t" << "Enter item value(per kg): " << "\t" << "Enter item weight(in kg): " << std::endl;
        std::cin >> item.name[i] >> item.value[i] >> item.weight[i];
    }

    //sort items according to given value
    std::sort(item.value, item.value + itemNumber);

    //print sorted list
        for( i = 0; i < itemNumber; i++)
    {
        std::cout << std::endl << std::endl << "Item name: " << "\t" << "Item value(per kg): " << "\t" << "Item weight(in kg): " << std::endl;
        std::cout << item.name[i] << "\t\t" << item.value[i] << "\t\t\t" << item.weight[i] << std::endl;
    }

   return 0;
}

最佳答案

您的结构应如下所示:

class treasure
{
    public:
        std::string name;
        double value;
        double weight;
};

然后你声明了一系列宝藏:
treasure item[100];

拿东西:
//take item name, item value, item weight
for( i = 0; i < itemNumber; i++)
{
    std::cout << std::endl << "Enter item name: " << "\t" << "Enter item value(per kg): " << "\t" << "Enter item weight(in kg): " << std::endl;
    std::cin >> item[i].name >> item[i].value >> item[i].weight;
}

最后排序:
std::sort(item, item + itemNumber,
    [] (auto t1, auto t2) {return t1.value < t2.value;})

http://ideone.com/GL3VKz

关于c++ - 在 C++ 中对多个链接数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278877/

相关文章:

python - 如果遇到异常,则跳过XML阅读循环的迭代

java - Java中的泛型和排序

java - 为什么快速排序的 JDK 实现存在堆栈溢出的风险?

c++ - NVIDIA Cuda访问GPU共享内存

c++ - 关于库和框架的问题

c++ - 在Boost线程中更改静态变量

c++ - C++等同于Python的cmp或Haskell的比较

c++ - 在做其他事情的同时用c++播放声音

python - 如何对组进行排序,使第一行中的数字最大,第二行中的数字最小,第三行中的数字第二大,依此类推

linux - Linux CSV根据大文件中的旧日期删除重复项(超过10万条记录)