Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

kontener vector, struktura i liczba porzadkowa

Ostatnio zmodyfikowano 2019-11-25 21:28
Autor Wiadomość
nanoant20
Temat założony przez niniejszego użytkownika
kontener vector, struktura i liczba porzadkowa
» 2019-11-25 18:14:25
mam nadzieję, że źródełko nie wyschło
i zaczerpnę znowu trochę wiedzy?

Tak jak w temacie, posiadam
kontener vector, którego typem jest struktura

C/C++
struct market
{
    int lp; //liczba porzadkowa
    string nazwa_produktu;
    double cena;
    string dzial;
    int ilosc_sztuk;
   
    /*
        market(int i, std::string n, double c, std::string d, int s)
        : lp(i), nazwa_produktu(std::move(n)), cena(c), dzial(std::move(d)), ilosc_sztuk(s) {}
        */
};

//potem w main() na poczatek ja zainicjalizowałem

vector < market > produkt { };

stworzyłem sobie funkcje, które dodaje, usuwa, czy wyszukuje record
i wszystko jest w porządku poza jednym ale, chodzi o liczba porządkowa
jak dodaje record to liczbę porządkową tworze tak
int lp = produkt.size() + 1;
 jest o.k.
ale jak usuwam jakikolwiek numer
zostaje dziura ,np. usuwam 2 to zostaje 1,3,4 itd.

Czy da się utworzyć tak "lp", żeby po usunięciu
(recordu-liczby, chodzi mi o całe rekordy)
"lp" sam się inkrementował (przesuwał), żeby była zachowana kolejność?

coś na wzór jak przy tworzeniu tabel w bazach sql
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,

//EDIT
chyba, że mam do tego złe podejście i powinienem
zamienić "lp" na "id" produktu, a "lp" podawać
przy wyświetlaniu w funkcjach np. tak
C/C++
int lp = 0;

cout << "\t\t\tProdukty w bazie\n" << endl;
for( auto el: produkt )
cout << right << setw( 3 ) << lp + 1 << right << setw( 3 ) << el.id << " " << right << setw( 30 )
<< setfill( ' ' ) << el.nazwa_produktu << setw( 10 )
     << setfill( ' ' ) << setprecision( 2 ) << fixed << el.cena << ".zl" << right << setw( 12 ) << el.dzial << "\t" << "sztuk. " << el.ilosc_sztuk << endl;

cout << endl;
  
P-175662
pekfos
» 2019-11-25 20:04:06
AUTO_INCREMENT zapewnia identyfikatory, nie liczby porządkowe. Cokolwiek chcesz mieć w swoich elementach wektora, musisz to zrobić sam. Do liczb porządkowych masz indeksy w wektorze, albo osobny licznik.
P-175665
nanoant20
Temat założony przez niniejszego użytkownika
» 2019-11-25 21:28:53
Do liczb porządkowych masz indeksy w wektorze, albo osobny licznik.

nie wiem czy dobrą idę drogą?

do index'ów w wektorze mógłbym się dobrać tak
C/C++
int index = 0;
vector < market >::iterator it =( produkt.begin() + index );

// auto it = std::next(produkt.begin(), index);
cout << "\t\t\tProdukty w bazie\n" << endl;
for( auto const & el: produkt )
//for (it = produkt.begin(); it != produkt.end(); ++it)
{
    cout << it->lp << " ";
   
    cout << " " << right << setw( 3 ) << el.lp << " " << right << setw( 30 )
    << setfill( ' ' ) << el.nazwa_produktu << setw( 10 )
    << setfill( ' ' ) << setprecision( 2 ) << fixed << el.cena << ".zl" << right << setw( 12 ) << el.dzial << "\t" << "sztuk. " << el.ilosc_sztuk << endl;
    it++;
}

muszę się z tym przespać, przemyśleć i zmierzyć

//edit
chyba najproście będzie wykonać
tak jak sugerujesz "osobny licznik"
dziękuję @pekfos

//edut
rozwiazalem problem wstawilem licznik
do funkcji gdzie usuwam recordy i tam
dokonuje deinkrementacja
nara 
P-175668
« 1 »
  Strona 1 z 1