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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача данных из одной формы в другую http://www.cyberforum.ru/cpp-beginners/thread1028689.html
Да, знаю, что тема с FAQ уже есть. Помогла, но не до конца. Дело в том, что я и консольный C++ знаю весьма так себе, поэтому с визуальным всё ещё хуже. Стараюсь изучить скорее, но программа нужна сейчас. На данный момент в коде только что созданного проекта WindowsForms я ориентируюсь довольно слабо, мне не ясны многие ключевые слова, использующиеся в коде. К тому же в FAQ вообще код на C#. Но...
C++ Вывод из файл Ребят помогите написать программу, которая читает данные с файла в двоичном режиме и выводит их на экран.У меня есть программа, которая записывает данные в файл в двоичном режиме, вот теперь мне надо эти данные считать и записать в структуру. struct vklad { string name; string valuta; int summa; int stavka; }; А затем уже вывести их на экран.Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread1028665.html
C++ задача на С++ и на Codeblocs
даны числа а,в,с.определить какое из них равно д,если никакое не равно д,то найти max(д-а,д-в,д-с)
простейший синтаксический анализатор(Распознавание числа) C++
Это задание является подзаданием для курсовой по формальным языкам. Мне надо(пока что только это) чтобы моя программа распознавала введенные числа. Числа могут быть трех форматов: 1)Простое целое число (Пр. 456) 2)Число с точкой(Пр. 78,35) 3)Число с плавающей запятой(Пр. 45Е-78) С простыми числами все легко.Сделала->работает но когда попыталась добавить код для распознавания чисел с точкой...
C++ Найти подстроку в файле http://www.cyberforum.ru/cpp-beginners/thread1028661.html
Дан файл text.txt FILE *fp=fopen("c:\\text.txt", "r"); Вводится подстрока char str; cin >> str; Задача: вывести количество вхождений подстроки в файл. С++
C++ Выход за пределы цикла Вообщем необходимо реализовать алгоритм по пунктам от 1 до 27 и в них есть переходы на другие пункты. Есть 2 цикла do while, один от 5 до 17, а второй от 5 до 19 пунктов, проблема в том что надо сделать переход от 14 до 18, а так же сделать полный выход из алгоритма на пункте 11. Да и сделать надо без использования goto. Может кто что посоветовать? подробнее

Показать сообщение отдельно
HEDO4EJIOBEK
1 / 1 / 0
Регистрация: 12.11.2013
Сообщений: 11

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

04.12.2013, 20:13. Просмотров 748. Ответов 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().
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru