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

Сортировка вектора строк(с компаратором) - C++

Восстановить пароль Регистрация
 
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
04.12.2013, 20:13     Сортировка вектора строк(с компаратором) #1
Сортирую вектор строк sort'ом из <algorithm> (с компаратором). В качестве компаратора использую comparator. Пишет, что неправильный operator<. При этом, если в 33-й и 39-й строках написать k==1 и k==-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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
char b[]={0,' ','a','d','g','j','m','p','t','w','z'+1};
 
short le(char k,char l){
    int i=1,j=1;
    while(!(b[i]<=k && k<b[i+1]))
        i++;
    while(!(b[j]<=l && l<b[j+1]))
        j++;
    if(i==j)
        return 0;
    else if(i<j)
        return 1;
    else
        return -1;
}
 
short comp(const char* a,const char *b,int i){
    short k=le(a[i],b[i]);
    if(k==1)
        return 1; //a<b
    else if(k==-1)
        return -1;//a>b
    else{
        if(a[i+1]==0 && b[i+1]==0){
            if(a[i]<b[i])
                return 1;//a<b
            else if(a[i]==b[i])
                return 0;//a==b
            else
                return -1;//a>b
        }
        else if(a[i+1]==0 && b[i+1]!=0){
            if(k!=-1)
                return 1;//a<b
            else
                return -1;//a>b
        }
        else if(a[i+1]!=0 && b[i+1]==0){
            if(k!=1)
                return 1;//a>b
            else
                return -1;//a>b
        }
        else{
            short l=comp(a,b,i+1);
            if(l==1)
                return 1;//a<b
            else if(l==-1)
                return -1;//a>b;
            else if(a[i]<b[i])
                return 1;
            else if(a[i]==b[i])
                return 0;
            else
                return -1;
        }
    }
}
 
struct comp_t{
    bool operator()(char *a,char *b){
        return (comp(a,b,0)==1)?true:false;
    }
}comparator;
Добавлено через 26 минут
le() -- функция сравнения символов в строке(1 -- k<l,0 -- k==l,-1 -- k>l).
comp() -- те же результаты для строк, но т.к. она требует рекурсии, сам компаратор отдельно.
comparator -- собственно компаратор, который используется в sort().
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 20:13     Сортировка вектора строк(с компаратором)
Посмотрите здесь:

сортировка вектора C++
Сортировка вектора C++
Сортировка вектора C++
C++ сортировка вектора
C++ Сортировка элементов вектора
сортировка вектора sort() C++
Сортировка вектора C++
Сортировка вектора структур C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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