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

Сортировка контейнера list - C++

Восстановить пароль Регистрация
 
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
14.09.2013, 16:25     Сортировка контейнера list #1
Как отсортировать (с помощью sort()) и вывести в текстовый документ список l ?
код программы:
Кликните здесь для просмотра всего текста
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.h>
 #include <vector>
 #include <algorithm>
 #include <list>
 #include <math.h>
 
class Tcity {
    public:
        float x,y;
        char name[30];
};
 
class TPair{
    public:
        Tcity city1;
        Tcity city2;
        float dist;
        };
 
 
 
 
using namespace std;
 
/*void show_list( list<float>&l)
{
    for (list<float>::iterator it = l.begin() ; it!=l.end() ; ++it)
        cout<<*it;
}       */
 
 
int main(int argc, char* argv[]) {
    system("chcp 1251");
    vector<Tcity> v;
    list<TPair> l;
    TPair pair;
    char buf[100];
 
    FILE *fp = fopen("C:\\task1-6.txt","rt");
 
    fgets(buf,sizeof(buf),fp);
    cout <<buf<< endl;
    Tcity *city;
    while (fgets(buf,sizeof(buf),fp)) {
        city = new Tcity;
        sscanf(buf,"%f%f%s",&(city->x),&(city->y),city->name);
        v.push_back(*city);
    }
     cout << "Найдено городов:" << v.size()<<endl;
 
     for (unsigned int i = 0; i < v.size(); i++) {
        for (unsigned int j = i+1; j < v.size(); j++) {
            if (i<j) {
                float d=sqrt((pow((v[i].x-v[j].x),2))+(pow((v[i].y-v[j].y),2)));
                if (d<3000){
                  // cout << d << "     " << v[i].name << " " <<v[j].name << endl;
                    pair.city1=v[i];
                    pair.city2=v[j];
                    pair.dist=d;
 
                    l.push_back(pair);
               }
 
 
 
            }
 
        }
 
     }
 
 
/*  show_list(*l);   */
    getchar();
 
}


Исходные данные текстового документа для программы:
Кликните здесь для просмотра всего текста
-5598 -6413 Нью-Йорк
5466 2359 Бангалор
8647 -1900 Милан
-2551 -2050 Рим
6436 -5991 Тегеран
1064 6306 Рио-де-Жанейро
-590 -9857 Калькутта
3262 5316 Барселона
6087 4705 Мехико
-4627 9747 Вена
-3146 -9728 Лима
-1901 -3764 Гётеборг
-1021 -1201 Севилья
6518 8304 Мумбаи
1603 6613 Вена
-4917 1337 Севилья
740 -583 Вроцлав
2624 7603 Рига
4281 -2711 Вильнюс
-2658 1242 Стамбул
-3008 -317 Бремен
1816 3269 Барселона
5514 -9574 Лодзь
-2001 6576 Богота
3362 2723 Сеул
-7782 928 Джакарта
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,866
Записей в блоге: 2
Завершенные тесты: 1
14.09.2013, 16:44     Сортировка контейнера list #2
Цитата Сообщение от weightless Посмотреть сообщение
с помощью sort()
std::list::sort
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
15.09.2013, 00:24  [ТС]     Сортировка контейнера list #3
Спасибо. А как вывести в текст?

Добавлено через 7 часов 3 минуты
std::list::sort Запускать в цикле?
Как вывести list в текстовый файл?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
15.09.2013, 00:59     Сортировка контейнера list #4
Цитата Сообщение от weightless Посмотреть сообщение
Как вывести list в текстовый файл?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <list>
#include <iterator>
 
int main()
{
    std::list<int> lst;
    for (int i = 0; i < 10; ++i)
        lst.push_back(i);
    std::ofstream file("out.txt");
    std::copy( lst.begin(), lst.end(),
                std::ostream_iterator<int>(file, " "));
    file.close();
    return 0;
}
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
15.09.2013, 17:17  [ТС]     Сортировка контейнера list #5
пишет две ошибки в строке
C++
1
    l.push_back(i);
:
Кликните здесь для просмотра всего текста

[bcc32 Error] File2.cpp(75): E2034 Cannot convert 'int' to 'TPair'
Full parser context
File2.cpp(34): parsing: int main(int,char * *)
[bcc32 Error] File2.cpp(75): E2342 Type mismatch in parameter '_Val' (wanted 'const TPair &', got 'int')
Full parser context
File2.cpp(34): parsing: int main(int,char * *)
из кода
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
int t=l.size();
    for (int i = 0; i < t; ++i)
        l.push_back(i);
    std::ofstream file("С:\\out.txt");
    std::copy( l.begin(), l.end(),
                std::ostream_iterator<int>(file, " "));
    file.close();
    return 0;


Добавлено через 5 минут
А если эту строку с ошибкой написать
C++
1
l[i].push_back();
, то выходит другая ошибка:
Кликните здесь для просмотра всего текста
[bcc32 Error] File2.cpp(75): E2094 'operator+' not implemented in type 'list<TPair,allocator<TPair> >' for arguments of type 'int'
Full parser context
File2.cpp(34): parsing: int main(int,char * *)
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
15.09.2013, 17:33     Сортировка контейнера list #6
Цитата Сообщение от weightless Посмотреть сообщение
А если эту строку с ошибкой написать
И зачем? Естественно чушь...
А ошибка в том, что список из TPair'ов состоит, а ты туда int'ы запихиваешь. Тебе общую схему показали, что ты туда вставишь - твое дело.

И вообще - свой код приводить надо. Изменил что-то, а мы по примеру должны понять, что ты там напечатал.
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
16.09.2013, 12:20  [ТС]     Сортировка контейнера list #7
А что тогда и в какой форме писать вместо стд?
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 12:25     Сортировка контейнера list #8
std это стандартная библиотека шаблонов. Тебе сказали, что ты вместо TPair пихаешь int. Скопипастил и даже не подумал.
Croessmah
16.09.2013, 12:29
  #9

Не по теме:

Цитата Сообщение от Peperovich Посмотреть сообщение
std это стандартная библиотека шаблонов.
тогда std::size_t - это стандартный шаблон?

Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 12:30     Сортировка контейнера list #10
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


тогда std::size_t - это стандартный шаблон?

Не по теме:


Извиняюсь, спутал std с stl

weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
16.09.2013, 16:22  [ТС]     Сортировка контейнера list #11
И все-таки, в коде
C++
1
std::ostream_iterator<TPair>(file, " "));
ошибка
Кликните здесь для просмотра всего текста
[bcc32 Error] iterator(327): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'TPair'
Full parser context
iterator(326): decision to instantiate: ostream_iterator<TPair,char,char_traits<char> > & operator ostream_iterator<TPair,char,char_traits<char> >::=(const TPair &)
--- Resetting parser context for instantiation...
File3.cpp(7): #include C:\Program Files (x86)\Embarcadero\RAD Studio\11.0\include\boost_1_39\boost\tr1\tr1\iterator
iterator(20): #include c:\program files (x86)\embarcadero\rad studio\11.0\include\../include/dinkumware/iterator
iterator(7): namespace std
iterator(311): class ostream_iterator<_Ty,_Elem,_Traits>
iterator(326): parsing: ostream_iterator<TPair,char,char_traits<char> > & operator ostream_iterator<TPair,char,char_traits<char> >::=(const TPair &)


C++
1
2
3
4
5
6
7
8
9
10
11
    ostream_iterator(ostream_type& _Ostr,
        const _Elem *_Delim = 0)
        : _Myostr(&_Ostr), _Mydelim(_Delim)
        {   // construct from output stream and delimiter
        }
 
    ostream_iterator<_Ty, _Elem, _Traits>& operator=(const _Ty& _Val)
        {   // insert value into output stream, followed by delimiter
        *_Myostr << _Val;
        if (_Mydelim != 0)
            *_Myostr << _Mydelim;
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 16:43     Сортировка контейнера list #12
Потому, что тип TPair не встроенный, а значит не известно как его выводить. Тебе нужно перегрузить оператор <<. Набери в гугле перегрузка оператора вывода в С++ и по примеру сделай для себя.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 16:55     Сортировка контейнера list
Еще ссылки по теме:

C++ Сортировка std::list
Сортировка vector и list C++
Поиск и сортировка list STL C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 16:55     Сортировка контейнера list #13
weightless, пишет же, нерусским языком, в чём ошибка:
Цитата Сообщение от weightless Посмотреть сообщение
'operator<<' not implemented in type 'ostream' for arguments of type 'TPair'
Yandex
Объявления
16.09.2013, 16:55     Сортировка контейнера list
Ответ Создать тему
Опции темы

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