2014-04-01 89 views
0
#include<iostream> 

using namespace std; 

class Lek{ 
    private: 
     int sifra; 
     string ime; 
     string proizvoditel; 
     int cena; 
     int kolicina; 
    public: 
     Lek(){ 

     } 
     void postavuvanje(int s, string i, string p, int c, int k){ 
      sifra = s; 
      ime = i; 
      proizvoditel = p; 
      cena = c; 
      kolicina = k; 
     } 

     int vratiSifra(){ 
      return sifra; 
     } 

     string vratiIme(){ 
      return ime; 
     } 

     string vratiProizvoditel(){ 
      return proizvoditel; 
     } 

     int vratiCena(){ 
      return cena; 
     } 

     int vratiKolicina(){ 
      return kolicina; 
     } 

     void pecati(){ 
      cout << sifra << " " << ime << " " << proizvoditel << " " << cena << " " << kolicina << endl; 
     } 
}; 

int main(){ 
    Lek Apteka[100]; 
    int n; 
    cout << "Vnesi go brojot na lekovi" << endl; 
    cin >> n; 
    int sifra; 
    string ime; 
    string proizvoditel; 
    int cena; 
    int kolicina; 

    // here we are inputting the values for the array of objects. 
    for(int i = 0; i < n; i++){ 
     cin >> sifra; 
     cin >> ime; 
     cin >> proizvoditel; 
     cin >> cena; 
     cin >> kolicina; 
     Apteka[i].postavuvanje(sifra, ime, proizvoditel, cena, kolicina); 
    } 

    // this is part to find the name of the element with the lowest price. 
    int najmala_cena = Apteka[0].vratiCena(); 
    int index = 0; 
    for(int i = 1; i < n; i++){ 
     if(Apteka[i].vratiCena() < najmala_cena){ 
      najmala_cena = Apteka[i].vratiCena(); 
      index = i; 
     } 
    } 

    cout << Apteka[index].vratiIme() << endl; 

    return 0; 
} 

我已經設法解決了以最低價格查找元素的問題。但是,我無法按價格(cena)對元素進行排序。另外,我必須找到所有具有「proizvoditel」「X」的元素,並找出它有多少個不同的名稱(ime)。對類的元素進行排序並在類中查找不同的元素

按價格排列元素(cena)我認爲這是不言自明的。但是由於我的英語對於第二個問題並不好,這裏基本上就是一個簡單的例子。

比方說,我們的用戶有下列輸入:

1 
PillX 
HospitalY 
125 
2 

2 
PillY 
HospitalY 
225 
4 

3 
PillZ 
HospitalY 
590 
1 

4 
PillX 
HospitalY 
125 
8 

所以,基本上,這些都是類的4名對象的屬性和我們有着同樣的「proizvoditel」用於所有的藥丸,被稱爲「 HospitalY「,我們必須找出它有多少個不同的藥片,所以它有3個,因爲PillX已經存在並且不會被第二次計算。

回答

0

最簡單的方法是超載自己的自定義排序操作​​和使用std::sort#include <algorithm>

bool cena_comp(const Lek &a, const Lek &b) { return a.vratiCena() < b.vratiCena(); } 

使用它:

bool (*cena_comp_ptr)(const Lek &a, const Lek &b) = cena_comp; 
Lek *beg = &Apteka[0], *end = &Apteka[n]; 
sort(beg, end, cena_comp_ptr); 
+0

快速的問題,是有使用排序或stable_sort的有什麼區別? – user3402189

+0

@ user3402189,是的。在穩定的排序中,相同的元素不會移動。例子設想一個列表'[... A,B,...]',A和B有不同的kolicena。如果你使用'stable_sort',那麼A總是會在B之前。如果你使用'sort',那麼訂單可能不會被保留 – yizzlez

+0

因此,基本上使用sort()會對價格進行排序並用當前元素更改值將保持不變)?如果我們使用stable_sort,除了整個元素的位置將被改變,其他東西的值和價格將是相同的? – user3402189