Wyswietlanie najwiekszego zysku dla każdej miejsowosci c++

0

Witam , mam problem odnośnie plików binarnych w C++. Moim problemem jest zadanie w którym trzeba wyświetlić największy zysk dla poszczególnych miejscowości. Problemem jest sprawdzanie czy miasto się powtarza, jeśli tak to wypisze firmę, miejscowość i zysk który jest największy.

Treść zadania:

Dany jest plik binarny zawierający dane o strukturze: firma, miejscowość, zysk.wypisz firmy mające zysk poniżej średniej z zysku oraz dla poszczególnych miejscowości wypisz firmę mającą największy zysk.<

funkcja jest podstawowa, wczytanie danych:

#include <iostream>
#include <fstream>


using namespace std;

struct sfirma
{
    char firma[12];
    char miejscowosc[15];
    int zysk;
};
void wyswietl2()
{
    sfirma f;
    fstream plik;
    plik.open("dane.dat",ios::binary|ios::in);

    for(int j=1;;j++)
    {
        plik.read(reinterpret_cast<char*>(&f),sizeof(f));
        if(plik.eof())break;
        cout<<f.firma<<" "<<f.miejscowosc<<" "<<f.zysk<<endl;
    }
    plik.close();
}
int main()
{
    sfirma f;
    wyswietl2();

    return 0;
}

Z góry dziękuje za jakiekolwiek pomysły ;)

0

Problemem jest sprawdzanie czy miasto się powtarza, jeśli tak to wypisze firmę, miejscowość i zysk który jest największy.

robisz sobie mape gdzie kluczem jest nazwa miejscowości a wartością obiekt sFirma. Jeśli w mapie już jest takowa firma sprawdzasz sobie kto ma wyższy zysk i ewentualnie zastępujesz i to tyle. Możesz też to zrobić na vectorze czy set czy nawet jakiejś liście. Zastanów się.

0
revcorey napisał(a):

robisz sobie mape gdzie kluczem jest nazwa miejscowości a wartością obiekt sFirma. Jeśli w mapie już jest takowa firma sprawdzasz sobie kto ma wyższy zysk i ewentualnie zastępujesz i to tyle. Możesz też to zrobić na vectorze czy set czy nawet jakiejś liście. Zastanów się.

Mapa chyba odpada, ponieważ nie jest znana z nazwy miejscowość, ponieważ nazwy są inne w innych plikach , a muszę zrobić elastyczny program.

0
Szymon Chmielewski napisał(a):

Treść zadania:

Dany jest plik binarny zawierający dane o strukturze: firma, miejscowość, zysk.wypisz firmy mające zysk poniżej średniej z zysku oraz dla poszczególnych miejscowości wypisz firmę mającą największy zysk.<

To nie jest kompletna definicja formatu danych (ani w formie binarnej, ani w formie tekstowej).
Bez tej definicji to sobie można tylko zgadywać.

Ale zakładając, że wczytujesz dane poprawnie:

using OneFirmInCityContainer = std::map<std::string, const sfirma *>;

OneFirmInCityContainer findBestCompanyInCities(const std::vector<sfirma> & firms)
{
    OneFirmInCityContainer bestInCity;

    for (const auto &firm : firms) {
          std::string city(firm.miejscowosc);
          auto bestIt = bestInCity.find(city);
          if (bestIt == bestInCity.end()) {
               bestInCity.insert({city, &firm});
          } else {
              if (firm.zysk > bestIt->second->zysk) {
                    bestIt->second = &firm;
              }
          }
    }

    return bestInCity;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1