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

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

Войти
Регистрация
Восстановить пароль
 
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11
#1

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

04.12.2013, 20:13. Просмотров 819. Ответов 0
Метки нет (Все метки)

Сортирую вектор строк 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().
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 20:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка вектора строк(с компаратором) (C++):

Сортировка вектора строк - C++
Доброго времени суток.Написал код для сортировки вектора таким образом, что бы в нем остались только слова, не содержащие повторных букв...

Реализовать функцию перемещения строк, принимающую в качестве параметров два вектора строк - C++
Подскажите насколько правильно решена задача. условие: Напишите функцию MoveStrings, которая принимает два вектора строк, source и...

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

сортировка вектора - C++
tok(int x, int y):u(x),uu(y){}... vector&lt;tok&gt; koor;... tok t2(x,y); koor.push_back(t2);... мне надо отсортировать вектор по...

сортировка вектора - C++
вектор содержит нетривиальные типы данных, (class t{int , char, struct c{...}...}) необходимо отсортировать вектор по одному из полей,...

Сортировка вектора - C++
struct A { int a; double e; }; vector &lt;A&gt; z; sort(z.begin(), z.end(), ......) отсортировать по а ( дописать где многоточие) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2013, 20:13
Привет! Вот еще темы с ответами:

Сортировка вектора - C++
Здравствуйте! Я хочу отсортировать вектор в обратном порядке, что-то похожее на: stable_sort(v.end(),v.begin()); все вроде...

Сортировка вектора - C++
Подскажите, пожалуйста, как можно отсортировать вектор, заполненный структурами DataStruct, используя алгоритмы сортировки stl? Критерий...

Сортировка элементов вектора - C++
Добрый вечер! Набросал наглядный пример, который вызывает ошибку компиляции. class My_Class { public: struct Item {...

Сортировка вектора структур - C++
Всем привет. При написании программы наткнулся на проблему: имею вектор структур, который нужно отсортировать(сортировкой Шелла) по...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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