Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108

C++ и класс set, требуется релизовать

09.12.2012, 15:06. Показов 8604. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!

Ранее никогда не имел дела с контейнерными кламмами STL, возникла необходимость написать программу на С++, которая бы вела учет пассажиров на ж/д вокзале (лабораторная в институте). Параметры для учета такие: номер поезда, станция назначения, время отправления. Реализовать всё это нужно через класс SET.

Может ко смог бы помочь за вознаграждение, был бы очень рад.

Пытался сам разобраться, но даже простой пример не компилируется:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <set> //Чтобы использовать set необходимо подключить заголовочный файл <set>
#include <iostream.h>
using namespace std;
int main(void)
{ 
    std::set<int> s;   //Создаем переменную типа set
    s.insert(10); //Добавляем 10
    s.insert(20); //Добавляем 20 
    s.insert(10); //Пытаемся добавить 10, но в set не может содержаться
              //несколько одинаковых объектов, поэтому объект не добавляется
    //В данный момент s.size() == 2
    return 0;
}
Ругается:
Error: main.cpp(6,18):Too few arguments in template class name 'set'
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2012, 15:06
Ответы с готовыми решениями:

Релизовать класс Money
Задание : Создать класс Money для работы с денежными суммами. Сумма должна быть представлена массивом, каждый элемент которого - десятичная...

Разработать класс для описанных ниже объектов. Включить в класс методы set (.), get (.), show (.)
Разработать класс для описанных ниже объектов. Включить в класс методы set (...), get (...), show (...) Patient: Фамилия, Имя, Отчество,...

Требуется метод доступа get или set
ДОбрый день. Подскажите что у меня не правильно? Пишет Требуется метод доступа get или set using System; using...

20
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
09.12.2012, 15:10
Не может быть, все должно компилироватся, пруф.
1
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
09.12.2012, 17:56  [ТС]
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Не может быть, все должно компилироватся, пруф.
А разве этот codepad проверяет корректность кода? Я думал он только синтаксис проверяет. тем не менее, может Вы сможете помочь мне?

Добавлено через 2 часа 38 минут
Спасибо за внимание, в С++ Builder 6 всё отлично откимпилилось, а в старой версии не хотел.
0
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
10.12.2012, 19:38  [ТС]
Кто подскажет, как этот в класс SET поместить 3 типа данных? Ну вот в примере выше - я так понял в этом классе содержится целое число.
Мне нужно "засунуть" туда целое число, и два текстовых (наверное char или string).
Очень нужно, помогите пожалуйста!
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
10.12.2012, 19:51
Цитата Сообщение от K12 Посмотреть сообщение
"засунуть" туда целое число, и два текстовых
То есть
Цитата Сообщение от K12 Посмотреть сообщение
номер поезда, станция назначения, время отправления?
Создайте структуру или класс с такими полями. А потом вместо set<int> - set<имя_класса>.
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
11.12.2012, 09:45
Цитата Сообщение от K12 Посмотреть сообщение
А разве этот codepad проверяет корректность кода?
Если что, то это компилятор...
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 10:58
Schizorb, И перегрузку оператора < не забыть или функтор указать.
2
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
11.12.2012, 19:05  [ТС]
Итак, хочу поделиться новостями:
Сделал так, как посоветовал уважаемый Schizorb, получился такой текст.
Пробую добавить запись в эту структуру - не дает. Я уверен, что делаю неверно, но никак разобраться не могу, подскажите, пожалуйста, как это сделать?
Вопросы сформулирую кратко:
1) Точно ли это получился класс SET?
2) Как добавить в него запись?
Огромное спасибо за помощь Вам, уважаемые программисты!

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
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <set>
#include <conio.h> 
#pragma hdrstop
#include <string.h>
//---------------------------------------------------------------------------
#pragma argsused
 
using namespace std;
 
struct poezd
{
int pnumber;       // номер поезда
char pstation[40]; // станция назначения
char time[5];      // время прибытия
};
 
int main(void)
{ 
    std::set<poezd> pset;   //Создаем переменную типа set
 
    pset.insert(1, "Station", "time"); //Пробуем добавить запись
}
Кстати, всё делаю я на Borland C++ Builder 6
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 19:14
K12, Эм. А конструктор? ну если нет конструктора тогда создать объект poezd заполнить его и сделать insert. Ну и оператор < перегрузить не забудьте все же.
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.12.2012, 19:28
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
#include <iostream>
#include <set>
#include <string>
 
 
class Train
{
    public:
        Train() {}
        Train (int number, std::string station, std::string time) :
            _number(number), _station(station), _time(time) {}
        friend bool operator < (const Train &t1, const Train &t2)
        {
            return t1._number < t2._number;
        }
    private:
        int _number;          // номер поезда
        std::string _station; // станция назначения
        std::string _time;    // время прибытия
};
 
int main()
{
    std::set<Train> pset;   //Создаем переменную типа set
    // pset.insert({1, "Station", "time"}); //Пробуем добавить запись
    pset.insert(Train (1, "Station", "time")); //Пробуем добавить запись
}
1
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
11.12.2012, 19:30  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
K12, Эм. А конструктор? ну если нет конструктора тогда
Извините за ламерский вопрос, но если можно без конструктора, тогда зачем он вообще?
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.12.2012, 19:31
MrGluck, Посоветовал бы не юзать имена, начинающиеся с подчеркивания... Передавать стринги через const ссылку (если мы не о С++11 говорим), ну и оператор < сделал бы не френдом (но это уже субъективно, хотя, если есть возможность, то не стоит вводить зависимости лишние).
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.12.2012, 19:32
Цитата Сообщение от K12 Посмотреть сообщение
Извините за ламерский вопрос, но если можно без конструктора, тогда зачем он вообще?
Вам без конструктора нельзя. Как вы компилятору объясните, что
C++
1
(1, "Station", "time")
это объект Train?
1
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
11.12.2012, 19:36  [ТС]
Уважаемый MrGluck, откомпилировал, всё замечательно. Спасибо
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.12.2012, 19:39
ForEveR, насчет конст ссылок для с++03 - согласен, а имена с подчеркиваниями - во многих гайдах по код стайлу написано таким образом обозначать поля класса, чтобы не было путаницы. И в некоторых исходниках видел подобную вещь.
Ну и с френд оператором - лень было get метод писать, пример скорее показательный)
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
#include <iostream>
#include <set>
#include <string>
 
 
class Train
{
    public:
        Train() {}
        Train (int number, const std::string &station, const std::string &time):
            _number(number), _station(station), _time(time) {}
        int getNumber() const
        {
            return _number;
        }
    private:
        int _number;          // номер поезда
        std::string _station; // станция назначения
        std::string _time;    // время прибытия
};
 
bool operator < (const Train &t1, const Train &t2)
{
    return t1.getNumber() < t2.getNumber();
}
 
int main()
{
    std::set<Train> pset;   //Создаем переменную типа set
    // pset.insert({1, "Station", "time"}); //Пробуем добавить запись
    pset.insert(Train (1, "Station", "time")); //Пробуем добавить запись
}
0
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
11.12.2012, 19:43  [ТС]
Спасибо! Пробую реализовать другие функции
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
11.12.2012, 19:44
Цитата Сообщение от MrGluck Посмотреть сообщение
во многих гайдах по код стайлу написано таким образом обозначать поля класса
Только подчеркивание при этом ставят после имени.
А имена, начинающиеся с подчеркивания, зарезервированы для разработчиков компиляторов(также как и имена, содержащие двойные подчеркивания).
1
 Аватар для K12
5 / 5 / 1
Регистрация: 22.08.2010
Сообщений: 108
11.12.2012, 20:01  [ТС]
Вот размышляю, теперь нужно реализовать поиск и вывод такой инфы:
* вывод всех занесенный поездов
* поиск по номеру
* поиск по станции
Пробую сделать так, но не выходит.
Нашел информацию:
Задача сравнения объектов возникает в STL очень часто. Например, если функция
find
ищет в интервале первый объект с заданным значением, она должна уметь сравнивать два объекта и узнавать, совпадают ли их значения. При попытке включения нового элемента в множество функция
set::insert
должна проверить, не существует ли данное значение в контейнере.
Но не понятно откуда вызвать эту функцию. Подскажете? Напрямую find(...) не работает.
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
11.12.2012, 20:04
Цитата Сообщение от K12 Посмотреть сообщение
Вот размышляю, теперь нужно реализовать поиск и вывод такой инфы:
* вывод всех занесенный поездов
* поиск по номеру
* поиск по станции
Пробую сделать так, но не выходит.
Нашел информацию:


Но не понятно откуда вызвать эту функцию. Подскажете? Напрямую find(...) не работает.
Ты работаешь с не POD типом, операторы < , = не определены. Либо описывай данные операторы, либо используй лямбда-функции, либо функторы.
0
0 / 0 / 0
Регистрация: 12.11.2016
Сообщений: 4
05.04.2018, 10:23
Помогите правильно перегрузить оператор, что би только добавляло в сет не повторяющиеся элементы. Никак не могу разобраться((
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class cell
{
public:
    cell(){}
    cell(long long i, long long j) :_i(i), _j(j){}
    friend bool operator < (const cell &t1, const cell &t2)
    {
        return t1._i < t2._i , t1._j < t2._j;
        
    }
    
 
private:
    int _i;
    int _j;
};
 
set<cell>y2;
        y2.insert(cell(10, 10));
        y2.insert(cell(10, 1));
        y2.insert(cell(1, 10));
                y2.insert(cell(10, 10));
вот (cell(1, 10)) уже не добавляет в сет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.04.2018, 10:23
Помогаю со студенческими работами здесь

Требуется метод доступа get или set
Доброго времени суток! Я начал изучать C# по книге Шилда, и с первой программой у меня возникает проблема. Пишу в среде Visual Studio 2013...

Требуется метод доступа get или set
в строке item = null Требуется метод доступа get или set помогите кто может. public class Deck : Stack&lt;Card&gt; { ...

Ошибка: Требуется метод доступа get или set
Я только учусь, не судите строго если поднималось. Есть класс (взят на форуме): class Load { public string dirs{ ...

класс SET
Разработать шаблонный класс Set. Класс должен содержать конструктор по умолчанию, основной конструктор и конструктор копирования....

класс set. код
где можно увидеть как построен шаблонный класс &lt;set&gt; : заголовок, интерфейс и его реализацию?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru