Софтуерно Инженерство
Loading...
BobyTopalova avatar BobyTopalova 25 Точки

Task 3 Entities от 28.01.18г.

Ще ми дадете ли съвет с какво е походящото решение? Мислех че е подобна на Car program от домашното, но полетата на търсене се променят при входа 1. вход- name age height

                               2. вход- name age place weight , за тази задача ще трябва да изчакам да вземем класове.

Ако има начин за решение без класове, моля за жокер?

 

Тагове:
0
C++ Fundamentals 18/01/2019 13:55:55
MartinBG avatar MartinBG 1169 Точки

Не са необходими класове за решаването на задачата.

Данните може да се съхраняват във вложена структура като тази:

std::unordered_map<std::string(1), std::unordered_map<std::string(2), size_t(3)> > data;

1 - име на колоната (name, age etc.)

2 - конкретна стойност на ред за тази колона (Joro, Pesho etc.)

3 - брой срещания на стойността за тази колона във входните данни

Пиши, ако искаш да постна цялото решение.

0
03/01/2019 13:28:16
BobyTopalova avatar BobyTopalova 25 Точки

data[name].insert({info,countValue}); да  разбрах как.

1
MartinBG avatar MartinBG 1169 Точки

Ето решението, до което бях стигнал по време на изпита.

Като го гледам сега, е една идея по-сложно, отколкото може (mapper може да е просто вектор от стрингове), но поне не е дълго. :)

 

Това е авторовото решение на задачата.

0
BobyTopalova avatar BobyTopalova 25 Точки

Благодаря! Само ето това може ли да обясниш каква е разликата с std::getline(std::cin >> std::ws, line) -      std::getline(std::cin, line)

и това  std::cin >> std::ws >> word;   това ws какво е ? На "посредник" прилича.

 while (input_stream && (input_stream >> word)) защо това , а не  while(input_stream >> word) това за грешка в потока ли е проверка

и въобще не мога да разбера къде се прави провека за търсената колона в таблицата.

0
BobyTopalova avatar BobyTopalova 25 Точки

ws от white spase трие празния ред, който иначе спира потока. Включен в #include<sstream>

0
MartinBG avatar MartinBG 1169 Точки

std::ws премахва всички празни символи от стрийма.

Използва се, когато първо четем през std::cin >> .... и после с getline(std::cin, ...), защото в противен случай getline ще върне празен стринг.

Малко съм попрекалил с проверките и изчистването на потока в това решение, че беше за изпита. :)

 

Проверката за резултата е това:

  std::cin >> std::ws >> word;
 
  int most = -1;
  std::string best;
  for (const auto& entry : data[word]) { // Check all entries for selected column
    if (entry.second > most) { // Find the most used
      most = entry.second;
      best = entry.first;
    }
  }
 
  std::cout << best << " " << most << std::endl; // print it

 

0
11/01/2019 22:58:49
BobyTopalova avatar BobyTopalova 25 Точки

Първо да опитам сама и после ще видя решението. Де да имаше един такъв, като теб на изпита. Голям провал ще бъде за мен.

Много, много благодаря за помощта!

0
BobyTopalova avatar BobyTopalova 25 Точки

Как да направя  попълването на данните в  unordered_map <string ,unordered_map<string, int> >data;

 data.insert ( { name } { info,countValue } ) ;

0
BobyTopalova avatar BobyTopalova 25 Точки

Може ли сорс кода,

ето моя жалък опит https://pastebin.com/uuHBDxJ5

0
03/01/2019 17:36:36
BobyTopalova avatar BobyTopalova 25 Точки

Може ли, задачата?

0