C ++: std :: map сортировка - PullRequest
       44

C ++: std :: map сортировка

3 голосов
/ 01 апреля 2012

Я новичок в C ++, и многим людям этот вопрос может показаться очевидным.

Если я напишу что-то вроде

std::map<int, double> m;
  • М гарантированно будетотсортировано по порядку int?
  • Необходимо ли определять класс компаратора для принудительной сортировки?

Например,

class own_int_less : public binary_function<int, int, bool>
{
public:
    bool operator()( const double &left, const double &right  ) const
    {
        return (abs(left - right) > epsilon) && (left < right);
    };
    double epsilon;
};
  • Когда в действительности происходит сортировка?Я имею в виду, вызывается ли функция сортировки каждый раз, когда я вставляю что-то в карту?Или он вызывается до того, как я перебираю карту?

Спасибо.

1 Ответ

10 голосов
/ 01 апреля 2012

Гарантируется ли сортировка m в соответствии с порядком int?

Да. Компаратором по умолчанию является std::less<Key>, который в вашем случае равен std::less<int>, который просто использует <, как и ожидалось.

Необходимо ли определять класс компаратора для принудительной сортировки?

Нет, потому что предыдущий ответ был "да"!

Когда на самом деле произошла сортировка?

Типичная реализация map использует компаратор для вставки нового элемента в правильное местоположение. Компаратор также используется при поиске.

...