Jump to content
Che

[C++][AJUTOR] Un fel de Associative Array in C++ ?

Recommended Posts

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 Arrays

In 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 !

Link to comment
Share on other sites

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 by botulnr2
Link to comment
Share on other sites

@botulnr2

Trebuie 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) ?

Link to comment
Share on other sites

@botulnr2

Trebuie 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

Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 18

Data 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.

2015_01_02_20_19_02.png

Cum as putea sa fac ?

Link to comment
Share on other sites

M-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 5

struct 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++ Tutorial

Structura folosita fiind:

#define Length 5

struct 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 !

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 zi

Sper ca nu vrei sa reinvetezi roata :)

http://loto.ro/ap/frecventa-numere.html

Edited by staticwater
  • Upvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...