2017-01-25 97 views
0

我有一個程序可以創建一個指向對象的指針數組。指針指向的類存儲一個項目的淨價格,並具有計算對象總價格的功能。使用C++中的對象函數的結果對對象數組排序

Product *p[10]; 

Book *b; 
Software *s; 

double price; 

cout << "Enter the price of the book: " << endl; 
cin >> price; 

b = new Book(price); 

cout << "Enter the price of the software: " << endl; 
cin >> price; 

s = new Software(price); 

cout << "Gross price of book: " << b->getGrossPrice() << endl; 
cout << "Gross price of software: " << s->getGrossPrice() << endl; 

p[0] = b; 
p[1] = s; 

有沒有辦法按總價格升序排列數組?

我知道在STL中有一種排序算法,但我不認爲它對我有用,或者至少我不知道如何使其工作。

網站上有類似問題的解決方案使用排序,但是我找不到顯示它在此上下文中使用的排序。

+0

是'getGrossPrice()'虛擬?那麼你可以調用一個自定義函數來調用排序 –

+1

[矢量排序與對象?](http://stackoverflow.com/questions/14081335/algorithm-vector-sort-with-objects) –

回答

4
std::sort(p, p+n, 
      [](Product* p1, Product* p2) 
      { 
       return p1->getGrossPrice() < p2->getGrossPrise(); 
      }); 

這是調用標準排序功能std::sort。我們將begin和end迭代器(在本例中爲指針)傳遞給我們要排序的範圍,第三個參數是一個返回true的函數對象,它的第一個參數嚴格小於(根據我們想要排序的strict weak ordering根據)比第二個參數,否則爲false。以[]開頭的部分稱爲lambda-expression:在其他語言中,類似的對象可以稱爲匿名函數。它是在C++ 11中引入的。

+0

阿門,請不要只發布代碼。這對提問者理解答案沒有幫助。如果可以,請編輯答案並添加簡要說明。 – mascoj

+0

可能要添加C++ 11>並可能爲pre添加解決方案。 –

+0

有點耐心,夥計們。 –

0

隨着range-v3,你可以簡單地做(用投影):

ranges::sort(prods, std::less<>{}, &Product::getGrossPrice); 

Demo