Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/158: Рейтинг темы: голосов - 158, средняя оценка - 4.77
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
1

Множества set, проверка принадлежности множеству

15.04.2011, 12:28. Показов 28963. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, ув. форумчане Для лабораторной работы необходимо реализовать множество и выполнять проверку принадлежности какого-либо элемента заданному множеству. Нашел вариант задания через ассоциативный контейнер set, да вот не работал никогда с подобным, по сему возникли вопросы.

Вообще, лабораторная работа посвящена реализации конечного автомата, который в свою очередь играет роль лексического аналазитора (выделяет из кода на языке ЯВУ лексемы). Так вот, я открываю файл с исх. кодов, забираю оттуда первый (второй, третий и т.д.) символ, теперь мне необходимо определить, является ли этот символ буквой, цифрой или разделителем. Придумал разве что вариант с заданием каким-либо отдельно множеств букв и цифр и проверки а-ля паскаль или SQL "IN".

Примерно так, видимо, стоит задать множество букв:
C++
1
2
3
4
5
const int max_nums = 5;
char nums[max_nums] = {'a', 'b', 'c', 'd', 'e'};
 
set<char> Letters;
for( int i = 0; i < max_nums; ++i ) Letters.insert(nums[i]);
Как выполнить проверку на принадлежность элемента этому множеству? Может, стоит попробовать другие варианты? enum не предоставляет средств проверки принадлежности, по массиву бегать тоже не хочется.. посоветуйте оптимальный вариант Может, есть какие-либо ф-ии библиотеки для проверки на цифру, букву и т.д.?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2011, 12:28
Ответы с готовыми решениями:

Построение функции принадлежности нечеткого множества
Всем привет =))) Столкнулся с такой задачей: написать программу построения графика функции...

Проверка принадлежности
Даны два действительных числа x и y. Проверьте, принадлежит ли точка с координатами (x, y)...

Проверка принадлежности к классу
В Java есть ф-я instanceof. Есть ли подобная в С++?

Проверка принадлежности точки определенной плоскости
Никак не дойдет алгоритм решения задачи -.- Помогите.

17
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 12:36 2
А чем стандартные функции для проверки не нравяцца?
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
2
17 / 17 / 1
Регистрация: 30.09.2009
Сообщений: 89
15.04.2011, 12:42  [ТС] 3
Спасибо, и все-таки они существуют, я так и знал)) сразу упрощает все и не надо задавать множества и что-то там проверять!
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.04.2011, 13:28 4
http://www.cplusplus.com/refer... ry/cctype/
2
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 11:42 5
Столкнулся с аналогичной ситуацией, только вместо банальной строки у меня в множестве объекты. Как быть в такой ситуации?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 11:48 6
Цитата Сообщение от Zerstroer Посмотреть сообщение
Как быть в такой ситуации?
Создать множество возможных типов объектов и потом искать в множестве/множествах.
А вообще, твой вопрос похож на этот:
Я написал "Hello world!", вроде работает. Как теперь её переделать в СУБД с поддержкой TSQL?
2
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:11 7
Спасет ли find в данной ситуации отца русской демократии?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.02.2012, 12:27 8
Zerstroer, По идее вполне.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30 9
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:30 10
Цитата Сообщение от ForEveR Посмотреть сообщение
А есть другие варианты?
Разумеется есть. Можно тип объекта хранить в самом объекте. Это ещё и самый эффективный и экономный способ. Если есть возможность добавить к объекту функцию GetType().
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30 11
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:32 12
Цитата Сообщение от Zerstroer Посмотреть сообщение
принадлежность объекта obj1 к my_set
В таких условиях исключительно my_set.find(...);
Но "самоопределение" типа может быть более хорошим вариантом.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:39 13
GetType() - для чего?
Меня не интересует содержимое объекта. Меня интересует только принадлежность его к определенной фиксированной группе объектов и всё. Решение, предложенное для Опы - меня не устраивает, так как Опа в множестве хранил примитивные типы.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:44 14
Цитата Сообщение от Zerstroer Посмотреть сообщение
для чего?
оК. Не GetType, а GetGroup. Т.е. объект может хранить в себе признак группы. Конечно, если один объект не может принадлежать нескольким группам.
У тебя всего два варианта, либо использовать множество объектов и проверять принадлежность этому множеству (не обязательно set, это может быть и Vector и хоть что), либо объект сам знает, к какому множеству он принадлежит и у него можно узнавать, а не принадлежит ли он этому множеству.
Первый способ подходит для любых объектов, даже если их код тебе не доступен. Второй способ более эффективный и по памяти и по скорости.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.02.2012, 13:05 15
Deviaphan, Вообщем-то извращение при использовании std::set.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 13:10 16
Признак группы - не актуален.
Фиксированный список объектов задается в другом блоке программы.
В мой обработчик, попадает только набор объектов (в виде set) и сам объект.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.02.2012, 13:27 17
Zerstroer, Ну очевидно find.
0
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 14:28 18
тогда вот такой вопрос:
find() - возвращает итератор? Как его обработать? С NULL сравнивать?

Добавлено через 9 минут
Нашел!
Сравнивать нужно с .end() этого же множества!
0
20.02.2012, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2012, 14:28
Помогаю со студенческими работами здесь

Использование множества set
Задача состоит в следующем: необходимо заполнить массив числами от 1 до 49 случайным образом так,...

Множества. Проверка множества на наличие элемента в нем
Во многих задачах сталкиваюсь с одной и той же проблемой: Нужно создать множество элементов,...

Сохранение и загрузка данных множества set
Добрый день. Пишу свое первое приложение, телефонная книга. Использую контейнер для хранения...

Как очистить содержимое множества set?
после добавления множества в вектор нужно очистить множество для повторной записи туда set&lt;string&gt;...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru