Как отсортировать массив векторов в c ++? - PullRequest
0 голосов
/ 01 августа 2020

Я создал массив векторов. После ввода данных я должен их отсортировать. Думаю, мне нужно использовать функцию компаратора, но я не могу понять, как ее использовать.

int main()
{
    
    int  n, k;
    cin >> n >> k;
    vector<long long> times[4];
  
    for (int i = 0; i < n; ++i)
    {
        ll t, a, b;
        cin >> t >> a >> b;
        times[a * 2 + b].push_back(t);
    }

    cout << times[0].size();
    ***//i need to sort the whole of times[0] after this***
}

Ответы [ 2 ]

3 голосов
/ 01 августа 2020

Это зависит от того, что вам нужно отсортировать.

Если вы хотите отсортировать внутренний массив, используйте этот способ сортировки. Сортировка раз [0]. Вторая версия - с настраиваемым компаратором

std::sort(times[0].begin(), times[0].end());
std::sort(times[0].begin(), times[0].end(), [](ll a, ll b){ return a < b; });

, если вам нужно отсортировать массив «раз», то с вашим собственным компаратором вы можете написать его следующим образом:

std::sort(std::begin(times), std::end(times), 
    [](const std::vector<ll>& a, const std::vector<ll>& b)
    {
        return a.size() < b.size();
    }
);

Редактировать на основе комментария:

И если лексикографического порядка сортировки достаточно, то вы можете пропустить настраиваемый компаратор:

std::sort(std::begin(times), std::end(times));
0 голосов
/ 05 августа 2020

Для возрастания

sort(times.begin(),times.end());

Для убывания

sort(times.begin(), times.end(), greater<int>()); 
...