2017-02-16 5 views
1

Рассмотрим следующий список:Сортировка нескольких связанных массивов в C++

Name Price(per kg) Weight(in kg) 

rice1  40   20 
rice2  50   27 
rice3  35   24 

Я хочу все типы риса сортируются в зависимости от их стоимости. Итак, я сортирую их.

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 

так, проблема в том, что я получаю значение в отсортированном списке, но не имена и веса. Я хочу, чтобы все отсортировано по стоимости. Как я могу это сделать?

Я написал следующий код. Но не уверен, что делать дальше.

#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; 
} 
+3

Используйте массив структур, а не в структуры массивов. Определите функцию сравнения для структуры. – molbdnilo

+0

Можете ли вы объяснить немного больше? Я имею в виду, какова была бы идея? – Insane

ответ

2

Ваша структура должна выглядеть следующим образом:

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

+0

Показаны эти ошибки, а строка 33 - строка, начинающаяся с [] '|| In function 'int main()': | | 33 | ошибка: ожидаемое первичное выражение перед '[' токен | | 33 | ошибка: ожидаемое первичное выражение перед ']' токеном | | 33 | предупреждение: C++ 0x авто доступно только с -std = C++ 0x или -std = gnu ++ 0x | | 33 | ошибка: ожидаемое первичное выражение перед «авто» | | 33 | предупреждение: C++ 0x авто доступно только с -std = C++ 0x или -std = gnu ++ 0x | | 33 | ошибка: ожидаемое первичное выражение перед «авто» | | 36 | ошибка: ожидается ';' перед 'for' | | 36 | ошибка: ожидается ';' перед ')' токеном | || === Сборка завершена: 6 ошибок, 2 предупреждения === | ' – Insane

+0

Текст ошибки прямо говорит, что код shoul компилируется с использованием стандарта C++ 11. Он включен с -std = C++ 0x компиляцией в g ++. Современные компиляторы используют C++ 11 или C++ 14 по умолчанию. Вот такая же аккомпанемент, написанный на C++ 98: http://ideone.com/WV25W7 – Zefick