95 votes

Comment utiliser std::sort pour trier un tableau en C++ ?

Comment utiliser la bibliothèque de modèles standard std::sort() pour trier un tableau déclaré comme int v[2000] ;

Le C++ fournit-il une fonction permettant d'obtenir l'indice de début et de fin d'un tableau ?

114voto

Xeo Points 69818

En C++0x/11, on obtient std::begin et std::end qui sont surchargés pour les tableaux :

#include <algorithm>

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

Si vous n'avez pas accès à C++0x, il n'est pas difficile de les écrire vous-même :

// 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;
}

77voto

Naszta Points 4322
#include <algorithm>
static const size_t v_size = 2000;
int v[v_size];
// Fill the array by values
std::sort(v,v+v_size); 

Sur C++11 :

#include <algorithm>
#include <array>
std::array<int, 2000> v;
// Fill the array by values
std::sort(v.begin(),v.end());

33voto

j_random_hacker Points 28473

Si vous ne connaissez pas la taille, vous pouvez utiliser :

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

Même si vous connaissez la taille, c'est une bonne idée de coder de cette manière car cela réduira la possibilité d'un bug si la taille du tableau est modifiée ultérieurement.

20voto

Mayank Points 1367

Vous pouvez le trier std::sort(v, v + 2000)

4voto

wahid Butt Points 31
//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;
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X