Che Posted January 2, 2015 Report Posted January 2, 2015 Salut !Am nevoie sa corelez o matrice unidimensionala cu o alta, in c++.Ceva de genul asta:[char/string] [int] [int] [int] [int]...[int]Si vreau ca de exemplu sa afisez toate valorile [int] corespunzatoare valorii [char/string] respective.Ma gandeam la ceva de genul cum e in PHP cu Associative Arrays:<?php$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");echo "Peter is " . $age['Peter'] . " years old.";?>PHP 5 ArraysIn PHP se pot face mai multe asocieri pentru un singur parametru din array ?Spre exemplu pentru Peter pot face Peter=>35=>Mercedes=>Blonda, Ben=>37=>Dacie=>Bagaboanta,valorile fiind varsta/masina/femeie si sa le accesez ceva de genul Peter[femeie] ?Mie asa ceva mi-ar trebui dar numai ca in C++.Cred ca este nevoie de doar doua matrici unidimensionale char prima []; int a_doua[]; si sa o accesez pe prima si apoi ciclez prin valorile celei de-a doua. Insa am nevoie sa aflu exact acele valori de tip int care corespund unei anumite valori din char prima[].Cum se poate face asta in C++ ?Multumesc anticipat ! Quote
Khronos Posted January 2, 2015 Report Posted January 2, 2015 Cred ca ai putea face asa ceva cu structuri in C++. Iei un vector in care fiecare element e o structura de tipul ala care iti trebuie tie, si poti sa bagi in ea age/car/house/etc. Ca sa le accesezi valorile pui Peter.age sau Peter.car sau orice vrei tu. Quote
botulnr2 Posted January 2, 2015 Report Posted January 2, 2015 (edited) Maping.#include <cstdlib>#include <iostream>#include <map>using namespace std;int main(int argc, char *argv[]){ map<string,string> masini; // primul argument e tipul idexului int/string/float , al doilea ce poate stoca acel index masini["peter"]="dacia"; cout<<masini["peter"]; system("PAUSE"); return EXIT_SUCCESS;}That's why C++ and not C Edited January 2, 2015 by botulnr2 Quote
Che Posted January 2, 2015 Author Report Posted January 2, 2015 @botulnr2Trebuie sa pastrez totul in memorie.Mai exact vreau sa incarc valorile dintr-un tabel.Prima e de tip string/char iar restul sunt int.Pot face asta cu o structura sau cu mapping tinand cont ca poate fi vorba si de 50.000 de valori pe care sa le accesez la un moment dat ?ex. String_cutare=> valori int corespunzatoare(mai multe, nu doar una) ? Quote
botulnr2 Posted January 2, 2015 Report Posted January 2, 2015 @botulnr2Trebuie sa pastrez totul in memorie.Mai exact vreau sa incarc valorile dintr-un tabel.Prima e de tip string/char iar restul sunt int.Pot face asta cu o structura sau cu mapping tinand cont ca poate fi vorba si de 50.000 de valori pe care sa le accesez la un moment dat ?ex. String_cutare=> valori int corespunzatoare(mai multe, nu doar una) ?De ce nu?Daca ai un volum mult mai mare de date de ce nu folosesti o baza de date portabila , gen sqlite Quote
Che Posted January 2, 2015 Author Report Posted January 2, 2015 De ce nu?Da-mi te rog un exemplu cum anume stochezi in memorie cu mapping urmatoarea informatie:Stefan cel Mare, 1456, 1504, 1392;Mihai Viteazul, 1593, 1601, 1723;.........bla bla bla, mai multe randuri, chiar si peste o mie sau chiar si peste 5000 de date asemenea.Caracteristici:Primul intotdeauna este un string ex. Stefan Cel Mare, Mihai Viteazul etc.Restul elementelor sunt numere intregi (int).Toate randurile au numar egal de elemente. Cati ani am pus la Stefan Cel Mare, tot atatia si la Mihai Viteazul.Vreau sa pot accesa oricand informatia in felul urmator:Sa afisez anii de la Mihai Viteazul de exemplu:Mihai Viteazul -> 1593, 1601, 1723;Sa pot accesa si asa: Mihai Viteazul[2] si sa-mi dea 1601. Adica sa pot face loop prin valorile int cu un for, gen for(int i=0;i<=3;i++) cout<< Mihai Viteazul (sau map-ul/array-ul corespunzator) ;Arata-mi un exemplu, te rog, cum faci astea de care am zis eu ?Multumesc ! Quote
nedo Posted January 3, 2015 Report Posted January 3, 2015 Che, ceea ce ai nevoie este un multimap, nu un map.Totusi, in general si in practica, nu este recomandat sa ai ca si cheie un string. Ce anume vrei sa faci mai exact?aici ai mai multe despre acest container. Este folosit exact pentru ce ai tu nevoie., stoca mai multe valori pentru o anumita cheie. Quote
Che Posted January 3, 2015 Author Report Posted January 3, 2015 Che, ceea ce ai nevoie este un multimap, nu un map.Totusi, in general si in practica, nu este recomandat sa ai ca si cheie un string. Ce anume vrei sa faci mai exact?aici ai mai multe despre acest container. Este folosit exact pentru ce ai tu nevoie., stoca mai multe valori pentru o anumita cheie.Vreau sa incarc numerele de la loto in niste matrici unidimensionale ca sa pot lucra cu ele, sa le calculez media, suma etc.Primul, stringul, este data, iar restul sunt cele 6 numere.Formatul e ceva de genul:1997-11-27 6 21 25 39 32 18Data nu cred ca pot sa o fac altceva decat string, sau daca ar fi vreun fel de format in C++ exact "date" sau "Data" ceva de genul care sa se refere exact la data. Problema e ca NU sunt la distante egale de timp fiindca uneori s-a facut saptamanal extragerea, alteori la 3 zile, alteori s-a amanat ca a fost nu stiu ce evenimente, deci nu e cu perioada egala.Cum as putea sa fac ? Quote
staticwater Posted January 3, 2015 Report Posted January 3, 2015 @Chearray of structure:Array of structures : structure array*«*Structure*«*C++ Tutorial Quote
Che Posted January 3, 2015 Author Report Posted January 3, 2015 @Chearray of structure:Array of structures : structure array*«*Structure*«*C++ TutorialM-am gandit deja si la asta insa (cred ca) e o problema. Hai sa-ti arat cum m-am gandit eu.Spre exemplu avem programul asta din linkul dat de tine:#include <iostream.h>#include <stdlib.h>#define Length 5struct Employee { char title [50]; int year;} employee [Length];void printemployee (Employee employee);int main (){ char buffer [50]; for (int n=0; n<Length; n++) { cout << "Enter title: "; cin.getline (employee[n].title,50); cout << "Enter year: "; cin.getline (buffer,50); employee[n].year = atoi (buffer); } cout << "\nYou have entered these employees:\n"; for (int n=0; n<Length; n++) printemployee (employee[n]); return 0;}void printemployee (Employee employee){ cout << employee.title; cout << " (" << employee.year << ")\n";}Array of structures : structure array*«*Structure*«*C++ TutorialStructura folosita fiind:#define Length 5struct Employee { char title [50]; int year;} employee [Length];Cum ar trebui sa fac eu ?Ar trebui ceva de genul char data_extragerii[10.000]; //pp. ca merge sa-i dai 10.000 de elemente.Si apoi cu un for de la 1 la 10.000 (sau cate extrageri sunt) sa populez matricea.Apoi ar trebui sa definesc structura ceva in genul asta:struct data_extragerii //care este o variabila si nu cred ca o poti pune ca nume la ceva anume{ int nr; //si aici vin cele 6 numere bagate cu un for de la 1 la 6 cu expresia extragere.nr;}extragere;Nu asa ? Sau cum sa fac ca sa ma folosesc de structuri ?Multumesc mult pentru ajutor ! Quote
nedo Posted January 3, 2015 Report Posted January 3, 2015 Spune-mi ai toate datele la fel? Poti sa garantezi ca datele o sa fie mereu in acelasi format? Ca sa stiu daca ma chinui cu verificari extinse in privinta datei, altfel, clasa e mai mult sau mai putin gata. 1 Quote
Che Posted January 3, 2015 Author Report Posted January 3, 2015 Spune-mi ai toate datele la fel? Poti sa garantezi ca datele o sa fie mereu in acelasi format? Ca sa stiu daca ma chinui cu verificari extinse in privinta datei, altfel, clasa e mai mult sau mai putin gata.Formatul e la fel tot timpul. Doar ca data nu e la distante egale, uneori s-au facut extrageri saptamanal, alteori din 3 in 3 zile, alteori s-au amanat. Quote
staticwater Posted January 3, 2015 Report Posted January 3, 2015 (edited) Ceva de genul:#include "stdafx.h"#include <iostream>#include <string>using namespace std;const int Count = 10;struct Loto{ int UniqueID; string Date; int Numbers[6]; };int _tmain(int argc, _TCHAR* argv[]){ Loto LotoArray[Count]; //data in for(int i = 0; i < Count; i++) { cout << "Loto " << i + 1 << endl; //UniqueID LotoArray[i].UniqueID = i + 1; //Date cout << " Enter the date:"; cin >> LotoArray[i].Date; //Numbers for(int j = 0; j < 6; j++) { cout << " Enter number " << j + 1 << ":"; cin >> LotoArray[i].Numbers[j]; } } //... //data out for(int i = 0; i < Count; i++) { cout << "Loto " << i + 1 << endl; cout << " UniqueID: " << LotoArray[i].UniqueID << endl; cout << " Date: " << LotoArray[i].Date << endl; cout << " Numbers: "; for(int j = 0; j < 6; j++) { cout << LotoArray[i].Numbers[j] << " "; } cout << "" << endl; } system("PAUSE"); return 0;}UniqueID -->Daca ai doua extrageri in aceasi ziSper ca nu vrei sa reinvetezi roata http://loto.ro/ap/frecventa-numere.html Edited January 3, 2015 by staticwater 1 Quote