Sortowanie zespołów po liczbie punktów

0

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.

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1