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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.72
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
03.07.2012, 13:56     Функция sort #1
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
Посмотрите здесь:

C++ Quiсk sort
C++ Не работает функция sort
list sort() C++
C++ q-sort сортировка
Quick sort c++ C++
C++ STL sort()
C++ Функция sort()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Каратель
Эксперт C++
6545 / 3965 / 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
Каратель
Эксперт C++
6545 / 3965 / 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++
 Аватар для Deviaphan
1283 / 1217 / 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
Еще ссылки по теме:

C++ sort()
Функция sort и ошибка С2228 C++
C++ Как работает функция sort(); ?
C++ Не работает функция sort (vector, vector)
C++ Sort()

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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

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