Как отсортировать std :: map? - PullRequest
       39

Как отсортировать std :: map?

3 голосов
/ 21 декабря 2010

Вот моя карта:

typedef std::map<int/*security id*/, PositionMonth> PortfolioMonth;

, где PositionMonth - это структура, напр .:

struct PositionMonth
        {
            Nav::Shares shares_;
            Nav::Amount market_value_;

            PositionMonth(void)
                {}
            PositionMonth(const Nav::Amount& market_value
                    , const Nav::Shares& shares)
                : market_value_(market_value)
                , shares_(shares)
                {}
        };

Вопрос : как отсортировать std::map по второму значению ключевого параметра (по market_value_, пусть будет int)? Примеры или ссылки?

PS. Методы повышения не заинтересованы!

PPS. Я не могу инициализировать мою std :: map с помощью функтора сравнения!

Спасибо за помощь!


Мое решение (или как я сам это сделал):

template<class T>
    struct LessSecondCcy
        : std::binary_function<T,T,bool>
    {
        inline bool operator ()(const T& _left, const T& _right)
        {
            return _left.second.market_value_.currency() < _right.second.market_value_.currency();
        }
    };

и в функции:

typedef std::pair<int/*security id*/, _Entry> data_t;

, где _Entry равно PositionMonth

std::vector<data_t> vec(item.funds_end_.begin(), item.funds_end_.end());
std::sort(vec.begin(), vec.end(), Nav::LessSecondCcy<data_t>());

Готово!

Ответы [ 2 ]

2 голосов
/ 21 декабря 2010

Есть несколько вариантов gamedev.net .Посмотрите на тему публикации Фруни.

В сторону: Почему вы не считаете Boost возможным поставщиком решений?Это уважаемое, хорошо оцененное, хорошо документированное решение для профессиональных программистов C ++.

1 голос
/ 21 декабря 2010

Может быть, пример кода в cplusplus.com artile в конструкторе std :: map даст искомое разъяснение!

РЕДАКТИРОВАНИЕ: Карта fifth, созданная в примере кода по ссылке выше, показывает, как изменить объект компаратора.

...