Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα και καλή χρονιά,

Καταρχάς να σας ενημερώσω πως ξέρω απειροελάχιστα πράγματα για τη c++.

Θέλω να φτιάξω έναν πίνακα 20 θέσεων(σωρό μεγίστων).

Κάθε στοιχείο του σωρού είναι ένα ζεύγος που αποτελείται από έναν χαρακτήρα και μία ακέραια τιμή από 1 έως

99 η οποία καθορίζει την προτεραιότητα του χαρακτήρα πχ. (j, 56).

Πως μπορώ να φτιάξω έναν τέτοιο πίνακα; Γίνεται με χρήση αντικειμένων όπως στη java;

Δημοσ.

Πρώτα πρέπει να φτιάξεις μια struct (ή class, είναι πρακτικά το ίδιο) που αντιπροσωπεύει το ζεύγος τιμών που θέλεις:

 

>struct char_and_priority {
   char character;
   int priority;
}

 

Μετά θέλεις να κάνεις ένα πίνακα από τα παραπάνω. Παρόλο που όταν λέμε πίνακα εννοούμε κάτι του στυλ int arr[20], στην πράξη καλύτερα θα ήταν να χρησιμοποιήσεις ένα std::vector, που είναι το αντίστοιχο του java.util.ArrayList. Aυτό γίνεται ως εξής:

 

>#include <vector>

std::vector<char_and_priority> my_vector;

// και στη συνέχεια το χρησιμοποιείς ως
char_and_priority cap;
my_vector.push_back(cap);

if(my_vector[0].character == 'a') // κλπ

 

Για τη συγκεκριμένη περίπτωση ίσως θα ήταν καλύτερα ακόμα να χρησιμοποιήσεις κάτι άλλο όπως για παράδειγμα std::map, αλλά δε θέλω να σε μπερδέψω οπότε ξεκίνα με κάτι κοντά σ' αυτά που ξέρεις.

Δημοσ.

Για κοίταξε αυτή την λύση

 

#include <iostream>

 

using namespace std;

#include <iomanip>

using std::setw; //ÁÖÇÍÅÉ ÊÁÌÐÏÓÏ ÊÅÍÏ

#include <cstring>

#include <list>

 

class Player

{

public:

string s1;

int s2 ;

};

 

///////////////////////////////DayWeekCove;

list<Player> players;

void Vprint(){cout << "Stoixeia\n";

list<Player>::iterator i;

for(i=players.begin(); i != players.end(); ++i)

{cout << (*i).s1 << " "<< (*i).s2 ; // print member

cout << endl;

}

cout << endl;

}

 

 

int main( )

{

Player temp;

 

temp.s1="B";

temp.s2=15;

players.push_back( temp );

 

temp.s1="A";

temp.s2=5;

players.push_back( temp );

temp.s1="C";

temp.s2=7;

players.push_back( temp );

Vprint();

 

system("pause");

}

Δημοσ.

Για κοίταξε αυτή την λύση

 

#include <iostream>

 

using namespace std;

#include <iomanip>

using std::setw; //ÁÖÇÍÅÉ ÊÁÌÐÏÓÏ ÊÅÍÏ

#include <cstring>

#include <list>

 

class Player

{

public:

string s1;

int s2 ;

};

 

///////////////////////////////DayWeekCove;

list<Player> players;

void Vprint(){cout << "Stoixeia\n";

list<Player>::iterator i;

for(i=players.begin(); i != players.end(); ++i)

{cout << (*i).s1 << " "<< (*i).s2 ; // print member

cout << endl;

}

cout << endl;

}

 

 

int main( )

{

Player temp;

 

temp.s1="B";

temp.s2=15;

players.push_back( temp );

 

temp.s1="A";

temp.s2=5;

players.push_back( temp );

temp.s1="C";

temp.s2=7;

players.push_back( temp );

Vprint();

 

system("pause");

}

 

 

 

Το ετρεξα αυτο αλλα μου βγαζει λαθος στο "{cout << (*i).s1 << " "<< (*i).s2 ;"

Συγκεκριμενα μου βγαζει binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion) 24 HelloJoanna

Δημοσ.

"Προφανώς" από το error message απλά λείπει #include <string>.

 

 

 

Δεν ξέρω τι καταλαβαίνετε με τα copy paste όπου ο ένας δε λέει ούτε καν τι κάνει αυτό που δίνει (πόσο μάλλον γιατί) και ο άλλος δεν μπορεί ούτε να το κάνει να τρέξει.

 

 

Δημοσ.

Γίνεται να το κάνεισ και κάπως έτσι.

 

>
static const int MAXSIZE=20;
char_and_priority array[MAXSIZE];

class char_and_priority
{
   public:
   char character;
int priority;
};

int main(int argc, char** argv)
{
.
.
.
}

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...