Liczby z pliku do mapy

0

Hej,

Mam plik z 2 wierszami.
W pierwszym wierszu mam pewną liczbę zawierającą ilość danych/liczb, które się znajdują w drugim wierszu, np n=11;
W drugim wierszu tak jak juz napisałem są liczby oddzielone spacją.

Chciałbym te liczby wpisać do mapy, ale tak, że
id 0 będzie wynosiło 11, nie 1.
Po prostu chcę wpisać liczby typu 3344 do jednego indexa a nie jedna liczba to jeden index.

Jak to najlepiej zrobic?

0

Chodzi o to, aby załadować te liczby od końca? Bo piszesz tak niejasno, że w sumie to nie wiadomo o co chodzi.

0

W lini mam liczbę która może być dwucyfrowa albo nawet trzycyfrowa. Chciałbym zapisać ją tylko do jednego indexu, bo tak to np getline pobiera tylko jeden znak, a trzycyfrowa ma 3 znaki.

1

Wczytuj liczby z pliku, a nie znaki. Tutaj masz przykład dla floatów – wymień typ danych na int i do dzieła.

Najpierw wczytaj jedną liczbę do zmiennej (z pierwszej linijki), aby wiedzieć ile jest wszystkich liczb w drugiej linijce, a następnie w pętli for załaduj je do mapy, sukcesywnie dekrementując wartość licznika.

0

Ale to i tak liczba 333 nie będzie pod indexem 0 tylko zostanie zapisana w 3 indexach

0

Zajrzyj pod link, który podałem w poprzednim poście i zapoznaj się z operatorem >>. Jeśli będziesz wczytywał liczby, a nie znaki, to każda liczba mieszcząca się w swoim zakresie (bez względu na ilość cyfr) zostanie wczytana w całości.

0

A mam jeszcze jedno pytanie:
Mam takie dane:

3015 4728 4802 4361 
3 	  2    1    4 	

Jest to 1 i 2 wiersz w pliku*. Te jednocyfrowe liczby to id liczby która jest nad nią. Jak to ustawić, aby liczby 1,2,3,4 były indeksami liczb tych wyżej?

1

Co ustawić? Co ma być na wyjściu?

Chcesz te dane powiązać kolumnami?

#include <iostream>
#include <unordered_map>
#include <fstream>
#include <sstream>

int main() {
   std::ifstream fin("nazwaPliku.txt");
   if (!fin) return 1;

   std::string firstLine;
   std::string secondLine;
   std::unordered_map<int, int> pairOfNumbers;

   if(std::getline(fin, firstLine) && std::getline(fin, secondLine)){      
      std::istringstream issNums{ firstLine };
      std::istringstream issIds{ secondLine };
      int num;
      int id;
      while ((issNums >> num) && (issIds >> id)) {
         pairOfNumbers.insert({ id, num });
      }
   }

   for (auto const& item : pairOfNumbers) {
      std::cout << item.first << ": " << item.second << '\n';
   }

   return 0;
}

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