LINUX.ORG.RU

История изменений

Исправление f1u77y, (текущая версия) :

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <map>

template<class T>
using ordered_set = __gnu_pbds::tree<T, 
      std::less<T>,
      __gnu_pbds::null_type,
      __gnu_pbds::rb_tree_tag,
      __gnu_pbds::tree_order_statistics_node_update>;

struct Record {
    // your fields
    double rating;
};

bool operator < (Record a, Record b) { return a.rating < b.rating; }

ordered_set<Record> top;
std::map<uint32_t, Record> ids;

// use ordered_set<T>::find_by_order() and ordered_set<T>::order_of_key()

ну и rating конечно должен быть уникален, поэтому каждый Record тоже будет уникальным

Исправление f1u77y, :

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <map>

template<class T>
using ordered_set = __gnu_pbds::tree<T, 
      std::less<T>,
      __gnu_pbds::null_type,
      __gnu_pbds::rb_tree_tag,
      __gnu_pbds::tree_order_statistics_node_update>;

struct Record {
    // your fields
    double rating;
};

bool operator < (Record a, Record b) { return a.rating < b.rating; }

ordered_set<Record> top;
std::map<uint32_t, Record> ids;

// use ordered_set<T>::find_by_order() and ordered_set<T>::order_of_key()

ну и `rating` конечно должен быть уникален, поэтому каждый `Record` тоже будет уникальным

Исходная версия f1u77y, :

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <map>

template<class T>
using ordered_set = __gnu_pbds::tree<T, 
      std::less<T>,
      __gnu_pbds::null_type,
      __gnu_pbds::rb_tree_tag,
      __gnu_pbds::tree_order_statistics_node_update>;

struct Record {
    // your fields
    double rating;
};

bool operator < (Record a, Record b) { return a.rating < b.rating; }

ordered_set<Record> top;
std::map<uint32_t, Record> ids;

// use ordered_set<T>::find_by_order() and ordered_set<T>::order_of_key()