Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.72
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

Функция sort - C++

03.07.2012, 13:56. Просмотров 3724. Ответов 8
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#define _CRT_SECURE_NO_WARNINGS
#include <string>
#include <iostream>
#include <map>
#include <math.h>
#include <algorithm>
 
using namespace std;
 
#define E 0.0000000001
 
class _Atom
{
public :
    int mas_unit;
    double mas;
    string unit;
    _Atom() : mas_unit(0), mas(0), unit("") {}
    bool operator < (_Atom& cur)
    {
        if (fabs(mas - cur.mas) >= E)
            return false;
        return true;
    }
};
 
bool CMP (_Atom a, _Atom b)
{
    if (fabs(a.mas - b.mas) < E)
        return false;
    return true;
}
 
void main()
{
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int n = 10;
    _Atom *pipe = new _Atom[n];
    for (int i=0; i<n; i++)
    {
        pipe[i].mas = i*10;
        pipe[i].mas_unit = i*10+105;
    }
 
    sort(pipe, pipe+n, CMP);
    for (int i=0; i<n; i++)
        cout << pipe[i].mas_unit << endl;
}
Хоть убейте, но не хочет функция sort стравнивать элементы ни через CMP, ни через "<" и выдает на выходе "Инвалидный <", хотя в CMP заходит.. Не могу понять, в чем ошибка, хоть убейте..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2012, 13:56     Функция sort
Посмотрите здесь:

Функция sort() - C++
Непонятно как работает функция из STL sort(). В нее третьим аргументом можно передавать некую функцию, предикату, которая возвращает...

Не работает функция sort - C++
Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; int main() { ...

Функция sort и ошибка С2228 - C++
Доброго времени суток, пытаюсь постичь функцию sort на примере сортировки классов, но все время выдает ошибку С2228, не могу понять что...

Как работает функция sort(); ? - C++
Помогите разобраться с функцией sort(); Вот например: void SORT(int **arr, int M, int N){ for (int i = 0; i &lt; M; i++) { ...

Std::sort - 3 аргумент другая функция - C++
Здравствуйте. Так все работает //вызывается из наследника sort(group.begin(), group.end(), ( MyClass&amp; obj1, MyClass&amp; obj2)...

По какому "признаку" сортирует функция sort() - C++
Здравствуйте возник такой вопрос, чтобы его задать я воспользуюсь кодом: vector &lt;pair &lt;int, pair&lt;int,int&gt;&gt;&gt; g; ...

Sort() - C++
Страуструп в своей книге вызывает эту функцию без всяких дополнительных библиотек. У меня же такая функция в стандартной библиотека...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
03.07.2012, 14:07     Функция sort #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath> 
using namespace std; 
#define E 0.0000000001
 
class _Atom
{
public:
    int mas_unit;
    double mas;
    string unit;
    _Atom(): mas_unit(0), mas(0), unit() {}
    bool operator < (const _Atom& cur) const
    {
        if (fabs(mas - cur.mas) >= E)
            return false;
        return true;
    }
};
 
bool CMP (const _Atom a, const _Atom b)
{
    if (fabs(a.mas - b.mas) < E)
        return false;
    return true;
}
 
int main(void)
{
    const int n = 10;
    _Atom *pipe = new _Atom[n];
    for (int i=0; i<n; i++)
    {
        pipe[i].mas = i*10;
        pipe[i].mas_unit = i*10+105;
    }
    sort(pipe, pipe+n);
    for (int i=0; i<n; i++)
        cout << pipe[i].mas_unit << endl;
    return 0;
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.07.2012, 14:11  [ТС]     Функция sort #3
softmob, И всё равно выдает ошибку, если поменять в перегрузке с " >= E" на " < E", хотя ошибки не должно быть, ведь я сам решаю, когда мне выводить true/false, да и почему функция не работает?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.07.2012, 14:36     Функция sort #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <string>
#include <iostream>
#include <algorithm>
  
class Atom {
   static const double Eps;
private:
    int mas_unit;
    double mas;
    std::string unit;
public:
    Atom() : mas_unit(), mas(), unit() {}
 
    double& Mas()
    {
       return mas;
    }
    
    double Mas() const
    {
       return mas;
    }
    
    int& Mas_unit()
    {
       return mas_unit;
    }
    
    int Mas_unit() const
    {
       return mas_unit;
    }
    
    bool operator < (const Atom& cur) const
    {
       return (std::abs(mas - cur.mas) >= Eps);
    }
};
 
const double Atom::Eps = 0.0000000001;
 
int main()
{
   const int N = 10;
   Atom pipe_[N];
 
   for (int i = 0; i < N; ++i)
   {
      pipe_[i].Mas() = i * 10;
      pipe_[i].Mas_unit() = i * 10 + 105;
   }
 
   std::sort(pipe_, pipe_ + N);
   
   for (int i = 0; i < N; ++i)
      std::cout << pipe_[i].Mas_unit() << std::endl;
}
http://liveworkspace.org/code/d4340a...34806c64cda753
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.07.2012, 14:40  [ТС]     Функция sort #5
Jupiter,Спасибо конечно, но все же в чем ошибка в моём варианте? Я уже часов 5 сижу и не могу понять, почему sort не хочет использовать функцию для сравнения, да и почему без сорта перегрузка оператора проходит "через раз" (об этом я написал выше).

p.s И да, не обращайте внимание на то, что, вроде бы класс, но всё public. Не для этого написано.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.07.2012, 14:45     Функция sort #6
Цитата Сообщение от nexen Посмотреть сообщение
но все же в чем ошибка в моём варианте?
влом искать ошибку, навскидку оператор неконстантный да и ещё и параметром принимает ссылку, а надо бы сыллку на константу
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.07.2012, 16:51  [ТС]     Функция sort #7
Цитата Сообщение от Jupiter Посмотреть сообщение
влом искать ошибку, навскидку оператор неконстантный да и ещё и параметром принимает ссылку, а надо бы сыллку на константу
уже пробовал всё это, просто забыл упомянуть.
Так же на всякий случай пытался написать конструктор копирования, тоже не помогло

Добавлено через 1 час 48 минут
up? : (
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.07.2012, 18:18     Функция sort #8
Цитата Сообщение от nexen Посмотреть сообщение
но не хочет функция sort стравнивать элементы ни через CMP
CMP у тебя вообще не функция сравнения на "меньше", если что. У тебя это сравнение на "равно", а оно тут левое вообще. То же и с "operator <".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 18:23     Функция sort
Еще ссылки по теме:

sort() - C++
пожалуйста напишите несколько примеров,с перегруженными версиями sort? vector&lt;int&gt; vec; vec.push_back(100); vec.push_back(10); ...

q-sort сортировка - C++
Здраствуйте , не могу понять где в коде ошибка . Выдает такое :d:\program...

Strand Sort - C++
Кто-нибудь реализовывал Strand сортировку на С++ ? на википедии примеры только на других языка...которые разобрать не могу. Если кто-нибудь...

qsort vs sort - C++
Собственно вопрос что лутше, в каких ситуациях, и почему , спасибо

Select Sort - C++
Здравствуйте. Задача состоит в том чтоб отсортировать строки матрицы NxM (то есть поменять их местами), по возрастанию первых чисел в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.07.2012, 18:23  [ТС]     Функция sort #9
Цитата Сообщение от Deviaphan Посмотреть сообщение
CMP у тебя вообще не функция сравнения на "меньше", если что. У тебя это сравнение на "равно", а оно тут левое вообще. То же и с "operator <".
Как ни странно, но это я уже начал извращаться после того, как не сработало обычно сравнение типа a.mas > b.mas. Сейчас поменял всё обратно и сработало.. Ну не может же такого быть > _ <
Спасибо
Yandex
Объявления
03.07.2012, 18:23     Функция sort
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru