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

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

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

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

14.09.2013, 16:25. Просмотров 1145. Ответов 12
Метки нет (Все метки)

Как отсортировать (с помощью 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 Джакарта
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 16:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка контейнера list (C++):

Использование контейнера list - C++
Не могу из методички с задачками по контейнерам решить пару из них. Есть список целых чисел (std::list&lt;int&gt;). Нужно, за один...

Указатель на элемент контейнера list - C++
Здравия желаю. Вопрос такой: будет/может ли меняться адрес элемента, стоящего за удаляемым. Если я, например, передам ссылку на нужный...

В чем ошибка? программа с использованием контейнера list - C++
/*Написать программу,моделирующую управление каталогом в файловой сис* теме. Для каждого файла в каталоге содержатся следующие...

Попытка реализовать чтото типо контейнера list - C++
Попытка реализовать чтото типо контейнера list я не могу сообразить, чего тут не правильно. Может кто поможет, код вроде не сложный.. #...

Сортировка ассоциативного контейнера! - C++
В классе есть поля: название, цена и количество. Нужно записать данные в ассоциативный контейнер, и нужно один раз отсортировать и вывести...

Сортировка для контейнера с указателями - C++
Понадобилось сделать контейнер указателей, но встала проблема сортировки и типа контейнера : #include &lt;set&gt; using std::set; struct...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Croessmah
Модератор
Эксперт CЭксперт С++
13133 / 7396 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
14.09.2013, 16:44 #2
Цитата Сообщение от weightless Посмотреть сообщение
с помощью sort()
std::list::sort
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
15.09.2013, 00:24  [ТС] #3
Спасибо. А как вывести в текст?

Добавлено через 7 часов 3 минуты
std::list::sort Запускать в цикле?
Как вывести list в текстовый файл?
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
15.09.2013, 00:59 #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  [ТС] #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
185 / 184 / 22
Регистрация: 24.03.2011
Сообщений: 667
Завершенные тесты: 1
15.09.2013, 17:33 #6
Цитата Сообщение от weightless Посмотреть сообщение
А если эту строку с ошибкой написать
И зачем? Естественно чушь...
А ошибка в том, что список из TPair'ов состоит, а ты туда int'ы запихиваешь. Тебе общую схему показали, что ты туда вставишь - твое дело.

И вообще - свой код приводить надо. Изменил что-то, а мы по примеру должны понять, что ты там напечатал.
weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
16.09.2013, 12:20  [ТС] #7
А что тогда и в какой форме писать вместо стд?
Peperovich
43 / 43 / 4
Регистрация: 17.05.2011
Сообщений: 162
16.09.2013, 12:25 #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 #10
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


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

Не по теме:


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

weightless
0 / 0 / 0
Регистрация: 12.02.2013
Сообщений: 103
16.09.2013, 16:22  [ТС] #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 #12
Потому, что тип TPair не встроенный, а значит не известно как его выводить. Тебе нужно перегрузить оператор <<. Набери в гугле перегрузка оператора вывода в С++ и по примеру сделай для себя.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 16:55 #13
weightless, пишет же, нерусским языком, в чём ошибка:
Цитата Сообщение от weightless Посмотреть сообщение
'operator<<' not implemented in type 'ostream' for arguments of type 'TPair'
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 16:55
Привет! Вот еще темы с ответами:

сортировка list - C++
Здорова! Почему то список не сортируется с помощью аргумента sort, вот код: #include &lt;iostream&gt; using std::cout; using std::endl; ...

Сортировка std::list - C++
Есть такой фрагмент програми. Создаю функцию для сортировки list. Вроде все правильно. В класе перегружены оператори &lt; i =. Не знаю что...

Сортировка vector и list - C++
Здравствуйте. vector&lt;int&gt; функцией STL медленнее сортируется, чем list&lt;int&gt; собственным методом. #include &lt;cstdlib&gt; #include...

Поиск и сортировка list STL - C++
Здравствуйте формумчане. Такая проблема. Написал почти рабочий код, но столкнулся с 2-мя проблемами. Первая: не могу понять как...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2013, 16:55
Ответ Создать тему
Опции темы

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