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

не проходит алгоритм sort - C++

Восстановить пароль Регистрация
 
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
01.04.2013, 10:17     не проходит алгоритм 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
50
51
52
53
54
#include <iostream>
#include <fstream>
#include <list>
#include <functional>
#include <string>
#include <time.h>
#include <algorithm>
using namespace std;
string ToLower(const string a){
    string tmp(a);
    for (int i=0;i<tmp.length();i++)
    {
        if (tmp[i]<='Z' && tmp[i]>='A')
            tmp[i]=tolower(tmp[i]);
        else 
            if (tmp[i]>= 'А' && tmp[i]<= 'Я')
                tmp[i]=_tolower(tmp[i]);
    }
    return tmp;
}
bool comp(const string & a, const string & b){
    return (ToLower(a)<ToLower(b));
}
int main ()
{
    setlocale(LC_ALL,".1251");
    ifstream in("input.txt");
    if (!in)
    {
        cout<<"Файл не найден"<<endl;
        return 0;
    }
    string tmp;
    list<string> l;
    while (!in.eof())
    {
        in>>tmp;
        l.push_back(tmp);
    }
    list<string>::iterator i;
    list<string>::reverse_iterator ri;
    for (i=l.begin();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    for (ri=l.rbegin();ri!=l.rend();ri++)
        cout<<*ri<<" ";
    cout<<endl;
    cout<<"Список в сортированном виде: "<<endl;
    sort(l.begin(),l.end());
    for (i=l.end();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 10:17     не проходит алгоритм sort
Посмотрите здесь:

C++ Алгоритм Быстрой сортировки (Quick Sort)
C++ Алгоритм sort
C++ Алгоритм сортировки In-place merge sort
C++ Функция sort()
C++ sort()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.04.2013, 10:17     не проходит алгоритм sort #2
Лист не может использоваться в sort. Используйте list.sort().
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
01.04.2013, 10:24  [ТС]     не проходит алгоритм sort #3
а как сюда добавить еще и принцип сортировки? скажем, чтоб сортировало по убыванию или согласно предикату comp?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
01.04.2013, 10:45     не проходит алгоритм sort #4
mazukta26,
C++
1
list.sort(comp);
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
01.04.2013, 22:13  [ТС]     не проходит алгоритм sort #5
в контейнере вектор есть upper_bound, помогает, скажем, при вставке в отсортированный контейнер какой-то элемент, не нарушая упорядоченности
для списка, видимо, это не работает
есть ли что-нибудь аналогичное для списка?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.04.2013, 22:22     не проходит алгоритм sort #6
у вектора нет. есть самостоятельный алгоритм. и он вроде работает не только с итераторами произвольного доступа. с списковыми итераторами конечно будет не очень эффективно, но вроде будет:
http://www.cplusplus.com/reference/a...kw=upper_bound
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
01.04.2013, 22:27  [ТС]     не проходит алгоритм sort #7
просто если закомментировать кусок кода с аппер_баунд, все хорошо
а если его не комментировать, то выскакивает уйма ошибок

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
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <fstream>
#include <list>
#include <functional>
#include <string>
#include <time.h>
#include <algorithm>
using namespace std;
string ToLower(const string a){
    string tmp(a);
    for (int i=0;i<tmp.length();i++)
    {
        if (tmp[i]<='Z' && tmp[i]>='A')
            tmp[i]=tolower(tmp[i]);
        else 
            if (tmp[i]>= 'А' && tmp[i]<= 'Я')
                tmp[i]=_tolower(tmp[i]);
    }
    return tmp;
}
bool comp(const string & a, const string & b){
    return (ToLower(a)<ToLower(b));
}
int main ()
{
    setlocale(LC_ALL,".1251");
    ifstream in("input.txt");
    if (!in)
    {
        cout<<"Файл не найден"<<endl;
        return 0;
    }
    string tmp;
    list<string> l;
    while (!in.eof())
    {
        in>>tmp;
        l.push_back(tmp);
    }
    list<string>::iterator i;
    list<string>::reverse_iterator ri;
    for (i=l.begin();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    for (ri=l.rbegin();ri!=l.rend();ri++)
        cout<<*ri<<" ";
    cout<<endl;
    cout<<"Список в сортированном виде: "<<endl;
    cout<<"\tПо возрастанию:"<<endl;
    l.sort();
    for (i=l.begin();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    cout<<"\tПо убыванию:"<<endl;
    for (ri=l.rbegin();ri!=l.rend();ri++)
        cout<<*ri<<" ";
    cout<<endl;
    cout<<"Сортировка по возрастанию без учета регистра:"<<endl;
    l.sort(comp);
    for (i=l.begin();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    cout<<"Вставка элемента с сохранением упорядоченности:"<<endl;
    tmp="dara";
    i=upper_bound(l.begin(),l.end(),comp);
    l.insert(i,tmp);
    for (i=l.begin();i!=l.end();i++)
        cout<<*i<<" ";
    cout<<endl;
    cout<<"Бинарный поиск элемента в упорядоченном списке:"<<endl;
    tmp="evA";
    if (binary_search(l.begin(),l.end(),tmp,comp))
        cout<<"Элемент найден!"<<endl;
    else cout<<"Элемент не найден!"<<endl;
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2013, 22:49     не проходит алгоритм sort
Еще ссылки по теме:

C++ Merge sort
C++ Sort()
Qvick-sort алгоритм быстрой сортировки. Гляньте плс( C++

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

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
01.04.2013, 22:49     не проходит алгоритм sort #8
может потому, что tmp забыли?
i=std::upper_bound(l.begin(),l.end(), tmp, comp);
Yandex
Объявления
01.04.2013, 22:49     не проходит алгоритм sort
Ответ Создать тему
Опции темы

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