witajcie, próbuje zrobić ranking zespołów w c++ przy użyciu listy, ale potrzebuje mieć tak jakby połączenie między nazwą zespołu oraz liczbą punktów, żeby sortować nazwy według liczby punktów i nie mam pojęcia jak to zrobić. Byłbym wdzięczny za pomoc.
0
1
Użyj std::sort
aby sortować z zadanym komparatorem. Ewentualnie możesz użyć Boost.BiMap
/Boost.MultiIndex
jeśli chcesz mieć kontener z posortowanym widokiem.
Przykład z MultiIndex
:
Masz klasę team
:
struct team
{
string name;
};
Definiujesz klasę zawierającą wszystkie kolumny bazy:
struct data_t
{
team t;
int points;
string const& name() const { return t.name; }
};
Kontener:
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/key_extractors.hpp>
namespace mi = boost::multi_index;
using db_t = mi::multi_index_container<
data_t,
mi::indexed_by<
mi::hashed_unique<mi::const_mem_fun<data_t, string const&, &data_t::name>>,
mi::ordered_unique<mi::member<data_t, int, &data_t::points>>
>
>;
Użycie:
db_t db;
db.insert({{"foo"}, 0});
db.insert({{"bar"}, 1337});
db.insert({{"baz"}, 42});
cout << "Jak sie w hashu ulozy:" << endl;
for(auto const& p : db.get<0>()){
cout << p.name() << " " << p.points << endl;
}
cout << string(80, '=') << endl;
cout << "Po punktach:" << endl;
for(auto const& p : db.get<1>()){
cout << p.name() << " " << p.points << endl;
}
https://wandbox.org/permlink/2lXOYvfBwzv9TgEr
Przy czym jeśli wystarczy Ci ręczne posortowanie wektora to może lepiej tak, to powyżej to bardzo fajny, bardzo mocny overengineering.
Alternatywnie użyj SQLITE i traktuj bazę danych jak bazę danych.