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

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

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

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

04.12.2013, 20:13. Просмотров 794. Ответов 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().
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2013, 20:13     Сортировка вектора строк(с компаратором)
Посмотрите здесь:

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

сортировка вектора - 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++
Подскажите, пожалуйста, как можно отсортировать вектор, заполненный структурами DataStruct, используя алгоритмы сортировки stl? Критерий...

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

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

Сортировка вектора QSort - C++
Есть сортировка массива: template&lt;class T&gt; void quickSortR(T* a, long N) { // На входе - массив a, a - его последний элемент. ...

сортировка вектора sort() - C++
программа заполняет вектор рандомными числами в диапазоне от 1 до 100 сортирует с помощью алгоритма sort(.begin(),.end()) - в...

Сортировка вектора по убыванию - C++
Если сортировка по возрастанию будет std::sort(a.begin(), a.end());, то как будет по убыванию?

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

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

Сортировка вектора структур - C++
Привет всем! Почему это не сортируется? Или как это правильно отсортировать? #include &lt;iostream&gt; #include &lt;vector&gt; #include...


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

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

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