Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Storage of a high score table, what kind of container?

Tags:

c++

containers

Say I have a high score table structured like

name score
name score
....

I need to do some file operations and manipulate certain areas of the file, and I thought the best way to do this would be to store it in a container that preserved the order of the file, do the data manipulation with the container, then output back to the file.

I considered using a map< std::string, int >, but a map wouldn't preserve the order of the file. Would a vector< pair< std::string, int >> be better, or is there some kind of ordered map I can use? I also need the container to repeat a name if necessary. I think a multimap keeps one key, but allows multiple values for that key, which isn't what I want since it wouldn't preserve order.

like image 563
Anonymous Avatar asked Feb 28 '23 18:02

Anonymous


1 Answers

Use the

std::vector< std::pair< std::string, int > >

solution.

Or even better, do a HighScoreEntry class, and have a std::vector< HighScoreEntry > -- then you'll be able to add additional data to it later, and embed score handling code in the class.

To add an entry, push the entry to the end of the vector, and run std::sort on it, just remember to write a comparison operator for HighScoreEntry.

class HighScoreEntry
{
public:
   std::string name;
   uint32 score;

   bool operator<(const HighScoreEntry& other) const
   {
       // code that determines ordering goes here
       return score < other.score
   }
};

Highscore table:

std::vector< HighScoreEntry > highscores;

Sorting:

std::sort( highscores.begin(), highscores.end() );

To preserve sort order for highscores that have the same score, use a timestamp, and add it to the comparator.

like image 179
Kornel Kisielewicz Avatar answered Mar 02 '23 06:03

Kornel Kisielewicz