std::binary_negate & not2
От: Аноним  
Дата: 04.08.08 09:13
Оценка:
bool my_fun2(const int &x,const int &y){
    return x <= y; 
    };

...
vector<int> v0(1000);
    for(int i=0; i!=1000;++i) v0[i]=i;

  sort(v0.begin(), v0.end(), binary_negate<less<int> >(less<int>( ) ) ); 
  sort(v0.begin(), v0.end(), not2 (greater<int>()) ) ;
  sort(v0.begin(), v0.end(), my_fun1);
//sort(v0.begin(), v0.end(), binary_negate(my_fun2())); //ошибка
//sort(v0.begin(), v0.end(), not2((my_fun2))); //ошибка


Пробую использовать одну функцию для сортировки и по возрастанию и по убыванию,
но в строках лезут ошибки,

//sort(v0.begin(), v0.end(), binary_negate(my_fun2())); //ошибка
//sort(v0.begin(), v0.end(), not2((my_fun2))); //ошибка

что надо написать чтобы это работало.

Спасибо.
Re: std::binary_negate & not2
От: php-coder Чехия http://slava-semushin.blogspot.com
Дата: 04.08.08 09:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Пробую использовать одну функцию для сортировки и по возрастанию и по убыванию,


Возможно, вам нужен функтор, который бы наследовался от std::binary_function.
Re[2]: std::binary_negate & not2
От: Аноним  
Дата: 04.08.08 09:21
Оценка:
Здравствуйте, php-coder, Вы писали:

PC>Здравствуйте, Аноним, Вы писали:


А>>Пробую использовать одну функцию для сортировки и по возрастанию и по убыванию,


PC>Возможно, вам нужен функтор, который бы наследовался от std::binary_function.


Для класса да

class U: public binary_function< U, U, bool>{
public:
    int i;
    bool operator()(const U &x,const U &y)const{
    return x.i >= y.i;
    }

};

vector<U> v1(1000);
for (int i=0; i!=1000;++i) v1[i].i=1000-i-1;  

sort(v1.begin(),v1.end(),not2(U()));
sort(v1.begin(),v1.end(),U());
//sort(v0.begin(),v0.end(),binary_negate<U>( U)  );// так тоже не получается
Re: std::binary_negate & not2
От: _Dreamer Россия  
Дата: 04.08.08 09:35
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:
что надо написать чтобы это работало.
А>Спасибо.

#include <vector>
#include <algorithm>
#include <functional>

struct my_negate : public std::binary_function< int, int, bool>
{
    bool operator()(const int &x,const int &y) const
    {
        return x >= y;
    }
};

template < typename T >
std::binary_negate<T> make_negator( T func )
{
    return std::binary_negate<T>( func );
}

int main()
{
    using namespace std;

    vector<int> v0(1000);
    for(int i=0; i!=1000;++i) v0[i]=i;

    sort(v0.begin(), v0.end(), binary_negate<less<int> >(less<int>( ) ) ); 
    sort(v0.begin(), v0.end(), not2 (greater<int>()) ) ;

    sort(v0.begin(), v0.end(), make_negator( my_negate() ) );
    sort(v0.begin(), v0.end(), binary_negate< my_negate > ( my_negate() ) );
    sort(v0.begin(), v0.end(), not2 (my_negate()) ) ;

    return EXIT_SUCCESS;
}
Re[3]: std::binary_negate & not2
От: Bell Россия  
Дата: 04.08.08 09:40
Оценка: 2 (1)
Здравствуйте, Аноним, Вы писали:

А>
А>//sort(v0.begin(),v0.end(),binary_negate<U>( U)  );// так тоже не получается
А>


sort(v1.begin(),v1.end(), binary_negate<U>( U()) );
Любите книгу — источник знаний (с) М.Горький
Re: std::binary_negate & not2
От: Кодт Россия  
Дата: 05.08.08 12:45
Оценка: 4 (1)
Здравствуйте, Аноним, Вы писали:

А>  sort(v0.begin(), v0.end(), not2 (greater<int>()) ) ;


Предикат not(x>y), т.е. x<=y, не является отношением строгого порядка.
Сортировка будет глючить (а в дебаге может и ассертами закидать).
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.