не удалось вывести / заменить аргумент шаблона: нет первого, второго для карты? - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу отсортировать std::map, используя stl std::sort(), но получаю ошибку на geeksforgeekside (не могу вставить всю ошибку, см. Ссылку)

#include <bits/stdc++.h>
using namespace std;

int main() {
    map<int,int> m{
        {1,11},
        {2,5},
        {3,0}
    };
    sort(begin(m),end(m),[](auto a, auto b){return a.second < b.second;});
    for(auto i: m)
        cout<<i.first<<" "<<i.second<<endl;
    return 0;
}

Iпробовал

sort(m.begin(),m.end(),[](pair<int,int> a, pair<int,int> b){returna.second < b.second;});

, но проблема остается той же, нет first, second для std::map ??

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Вы не можете использовать std::sort() для сортировки std::map.

Как видите, на этой странице требование std::sort()

Требования к типу: RandomIt должен соответствовать требованиям ValueSwappable и RandomAccessIterator.

и итератор для std::map не является RandomAccessIterator (как итератор для std::vector или std::deque).

В любом случае, std::map является своего рода самосортируемым контейнером.

Не имеет смысла сортировать это. Имеет смысл, если вы хотите, отсортировать его в соответствии с другим компаратором, и вы можете сделать это, объясняя третий параметр шаблона std::map (по умолчанию: std::less, в соответствии с ключом`).

0 голосов
/ 15 ноября 2018

Это карта, она отсортирована по ключу.

Вы не можете отсортировать его по значению.

Также не использовать bits/stdc++.h.

...