STL и вектор предоставляют возможность сортировки? - PullRequest
0 голосов
/ 21 июня 2010

Предоставляет ли STL и Vector параметр сортировки по умолчанию?.

Ответы [ 4 ]

23 голосов
/ 21 июня 2010

Класс vector не имеет функции sort.

Но есть sort, который работает на всех диапазонах итераторов. И vector выставляет итераторы.

Сортировать вектор vec:

#include <algorithm>

std::sort(vec.begin(), vec.end());
11 голосов
/ 21 июня 2010

Да, в алгоритмах stl есть sort().Вы должны посмотреть на http://www.cplusplus.com/reference/algorithm/sort/

6 голосов
/ 21 июня 2010

Вы, вероятно, хотите std :: sort .

#include <algorithm>
#include <vector>

int
main()
{
    std::vector<int> foo;

    std::sort( foo.begin(), foo.end() );

    return 0;
}

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

#include <boost/assign/list_of.hpp>

#include <boost/foreach.hpp>

#include <algorithm>
#include <iostream>
#include <vector>

int
main()
{
    std::vector<int> foo = boost::assign::list_of(1)(4)(5)(10)(3)(2);

    std::cout << "unsorted" << std::endl;
    BOOST_FOREACH( const int i, foo ) {
        std::cout << i << std::endl;
    }

    std::sort( foo.begin(), foo.end() );

    std::cout << "sorted" << std::endl;
    BOOST_FOREACH( const int i, foo ) {
        std::cout << i << std::endl;
    }

    return 0;
}
1 голос
/ 21 июня 2010

Как уже упоминали другие в своих ответах, есть функция std :: sort.

Тем не менее, с помощью параметра сортировки по умолчанию?Вы имеете в виду, что хотите отсортировать вектор, где T - это класс, который вы определили.В этом случае вы должны реализовать «оператор <» в вашем классе.</p>

Например,

class Foo 
{
    public : 
      Foo();
      ~Foo();
    private :
        int c;
};

std::vector<Foo> foovec;
std::sort(foovec.begin(), foovec.end());

Чтобы убедиться, что строка «std :: sort» работает, вам нужно определить «operator <» в Foo. </p>

 class Foo 
 {
     public : 
       Foo();
       ~Foo();
       bool operator<(const Foo& rFoo) const;
     private :
       int c;
 };

bool Foo::operator<(const Foo& rFoo) const
{
    return(c < rFoo.c);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...