1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>
template <typename Key, typename Value>
struct SortMap: public std::unordered_map<Key, Value>
{
using UMap = std::unordered_map<Key, Value>;
using ValueType = typename UMap::value_type;
using Vect = std::vector<ValueType const *>;
private:
Vect d_sortVect;
public:
Vect const &sort(); // sort the keys
template <typename Functor> // use a functor
Vect const &sort(Functor const &functor);
};
template <typename Key, typename Value>
SortMap<Key, Value>::Vect const &SortMap<Key, Value>::sort()
{
d_sortVect.clear();
for (auto const &el: *this)
d_sortVect.push_back(&el);
std::sort(d_sortVect.begin(), d_sortVect.end(),
[&](auto const *lhs, auto const *rhs)
{
return lhs->first < rhs->first;
}
);
return d_sortVect;
}
|