2017-02-16 55 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行是以[]'||開頭的行。在函數'int main()'中: | 33 |錯誤:期望'['token | | 33 |錯誤:期望']'令牌之前的主表達式| | 33 |警告:C++ 0x auto僅適用於-std = C++ 0x或-std = gnu ++ 0x | | 33 |錯誤:期望'auto'之前的主表達式| | 33 |警告:C++ 0x auto僅適用於-std = C++ 0x或-std = gnu ++ 0x | | 33 |錯誤:期望'auto'之前的主表達式| | 36 |錯誤:預期';'在'for'之前 | 36 |錯誤:預期';'在')'令牌之前| || ===構建完成:6個錯誤,2個警告=== |' – Insane

+0

錯誤文本直接表示代碼可以使用C++ 11標準進行編譯。它在g ++中啓用了-std = C++ 0x編譯標誌。現代編譯器默認使用C++ 11或C++ 14。這是用C++ 98編寫的同一個axample:http://ideone.com/WV25W7 – Zefick