Как использовать std :: sort для сортировки массива в C ++ - PullRequest
82 голосов
/ 05 мая 2011

Как использовать стандартную библиотеку шаблонов std::sort() для сортировки массива, объявленного как int v[2000];

Предоставляет ли C ++ некоторую функцию, которая может получить начальный и конечный индексы массива?

Ответы [ 13 ]

98 голосов
/ 05 мая 2011

В C ++ 0x / 11 мы получаем std::begin и std::end, которые перегружены для массивов:

#include <algorithm>

int main(){
  int v[2000];
  std::sort(std::begin(v), std::end(v));
}

Если вы неу меня нет доступа к C ++ 0x, написать их несложно:

// for container with nested typedefs, non-const version
template<class Cont>
typename Cont::iterator begin(Cont& c){
  return c.begin();
}

template<class Cont>
typename Cont::iterator end(Cont& c){
  return c.end();
}

// const version
template<class Cont>
typename Cont::const_iterator begin(Cont const& c){
  return c.begin();
}

template<class Cont>
typename Cont::const_iterator end(Cont const& c){
  return c.end();
}

// overloads for C style arrays
template<class T, std::size_t N>
T* begin(T (&arr)[N]){
  return &arr[0];
}

template<class T, std::size_t N>
T* end(T (&arr)[N]){
  return arr + N;
}
64 голосов
/ 05 мая 2011
#include <algorithm>
static const size_t v_size = 2000;
int v[v_size];
// Fill the array by values
std::sort(v,v+v_size); 

In C ++ 11 :

#include <algorithm>
#include <array>
std::array<int, 2000> v;
// Fill the array by values
std::sort(v.begin(),v.end()); 
29 голосов
/ 05 мая 2011

Если вы не знаете размер, вы можете использовать:

std::sort(v, v + sizeof v / sizeof v[0]);

Даже если вы знаете размер, будет хорошей идеей закодировать его таким образом, так как это уменьшит вероятностьошибка, если размер массива будет изменен позже.

16 голосов
/ 05 мая 2011

Вы можете отсортировать std::sort(v, v + 2000)

3 голосов
/ 12 марта 2017

вы можете использовать sort () в C ++ STL.Функция sort () Синтаксис:

 sort(array_name, array_name+size)      

 So you use  sort(v, v+2000);
3 голосов
/ 10 августа 2015
//It is working
#include<iostream>
using namespace std;
void main()
{
    int a[5];
    int temp=0;
    cout<<"Enter Values"<<endl;
    for(int i=0;i<5;i++)
    {
        cin>>a[i];
    }
    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            if(a[i]>a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    cout<<"Asending Series"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<endl;
        cout<<a[i]<<endl;
    }


    for(int i=0;i<5;i++)
    {
        for(int j=0;j<5;j++)
        {
            if(a[i]<a[j])
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
    cout<<"Desnding Series"<<endl;
    for(int i=0;i<5;i++)
    {
        cout<<endl;
        cout<<a[i]<<endl;
    }


}
2 голосов
/ 08 мая 2018

Это так просто ... C ++ предоставляет вам функцию в STL (Стандартная библиотека шаблонов) под названием sort, которая работает на 20-50% быстрее, чем быстрая сортировка с ручным кодированием.

Вот пример кода для его использования:

std::sort(arr, arr + size);
1 голос
/ 22 марта 2017

C ++ сортировка с использованием функции сортировки

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

vector <int> v[100];

int main()
{
  sort(v.begin(), v.end());
}
0 голосов
/ 14 июля 2019

С библиотекой Ranges, которая входит в C ++ 20, вы можете использовать

ranges::sort(arr);

напрямую, где arr - встроенный массив.

0 голосов
/ 17 января 2019
//sort by number
bool sortByStartNumber(Player &p1, Player &p2) {
    return p1.getStartNumber() < p2.getStartNumber();
}
//sort by string
bool sortByName(Player &p1, Player &p2) {
    string s1 = p1.getFullName();
    string s2 = p2.getFullName();
    return s1.compare(s2) == -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...