Program wypisuje pary malejąco

0

Mam mały problem z kodem. Ogólnie działa jak należy ale np. po wpisaniu, że chcę dodać 3 pary, najpierw prosi o podanie wartości dla 3 pary, potem dla drugiej i na końcu dla pierwszej. Jak to odwrócić ?
Wiem, trochę się kod rozjechał bo piszę z telefonu ale czytelny jest w miarę.

#include "stdafx.h"
#include <iostream>
#include <unordered_map>

using namespace std;

class pojemnik_map

    {
private:
    unordered_map<int, double>* mapa; // wskaznik na mape o parach string i double

public:
    pojemnik_map(); // kosntrutktor
    void wyswietl(); // funkcja wysiwetlacjaca
    void nowe_wartosci(); // funkcja wproawdzajaca nowe dane
    ~pojemnik_map() { delete mapa; }; // desktruktor czyszczacy pamiec, usuwajacy mape
};

pojemnik_map::pojemnik_map()
{

    mapa = new unordered_map<int, double>; // zaalokowanie pamieci dla mapy o parach string i double
    pair<int, double> para; // zainicjowanie zmiennej typu para string i double
    cout << "Podaj ile par chcesz wprowadzic ? " << endl;
    int size = 0;
    cin >> size; // wprowadzenie ilosci par

    while (size--) { // wprowadzenie danych

        cout << "Podaj numer " << size + 1 << " pary" << endl;
        cin >> para.first;
        cout << "Podaj wartosc " << size + 1 << " pary" << endl;
        cin >> para.second;
        mapa->insert(para); // przypisanie wartosci do mapy
    }
}

void pojemnik_map::wyswietl()
{

    cout << "Wyswietlenie zawartosci:" << endl;
    int temp = 0; // zmienna pomocnicza  zeby wyswietlic liczbe porzadkowa
    for (auto& i : *mapa) // petla zakresowa dla obiektow cpp 11
    {
        cout << ++temp << ": " << i.first << " = " << i.second << endl; // wyswietlenie
    }
}

void pojemnik_map::nowe_wartosci()
{

    cout << "Ilosc par do dodania" << endl;
    int size = 0;
    cin >> size;

    pair<int, double> para;

    while (size--) {

        cout << "Podaj numer " << size + 1 << " pary" << endl;
        cin >> para.first;
        cout << "Podaj wartosc " << size + 1 << " pary" << endl;
        cin >> para.second;

        mapa->insert_or_assign(para.first, para.second); // uzycie funkcji insert_or_assign z biblioteki cpp 17, dodaje  nowy klucz, a jezeli istnieje to zmienia jego wartosc
    }
}

int main()
{
    pojemnik_map mapa1; // stowrzenie obiektu klasy my_map
    mapa1.wyswietl();
    mapa1.nowe_wartosci();
    mapa1.wyswietl();

    return 0;
}
2

Bo iterujesz do zera.

    while (size--)

unordered_map<int, double>* mapa;
mapa = new unordered_map<int, double>;

Po co to?

0

Tak mi internet podpowiedział :) Grunt, że działa

2

To spróbuj skopiować ten swój pojemnik_map.

1

Po kiego grzyba tam jest wskaźnik do unordered_map?
A nawet jeśli już jest o wiele bezpieczniej użyć mądrego wskaźnika (surowy wskaźnik to anachronizm C++11).

0

Iteracja musi być do 0, przy dojściu do 0 pętla się zatrzymuje a przy iteracji rosnącej pętla będzie się powtarzała w nieskończoność. Zostawiam tak jak jest bo już nie mam kiedy nad tym siąść. Dzięki za rady :)

0

Jak już nie możesz (nie umiesz?) zmienić pętli, to weź zrób coś takiego...

    cin >> size; // wprowadzenie ilosci par
    int initial_size = size;
 
    while (size--) { // wprowadzenie danych
 
        cout << "Podaj numer " << initial_size - size << " pary" << endl;
        cin >> para.first;
        cout << "Podaj wartosc " << initial_size - size << " pary" << endl;

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