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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 95, средняя оценка - 4.89
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
15.04.2011, 12:28     Множества set, проверка принадлежности множеству #1
Доброго времени суток, ув. форумчане Для лабораторной работы необходимо реализовать множество и выполнять проверку принадлежности какого-либо элемента заданному множеству. Нашел вариант задания через ассоциативный контейнер 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 не предоставляет средств проверки принадлежности, по массиву бегать тоже не хочется.. посоветуйте оптимальный вариант Может, есть какие-либо ф-ии библиотеки для проверки на цифру, букву и т.д.?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
15.04.2011, 12:36     Множества set, проверка принадлежности множеству #2
А чем стандартные функции для проверки не нравяцца?
isalnum
isalpha
iscntrl
isdigit
isgraph
islower
isprint
ispunct
isspace
isupper
isxdigit
Опа!!
14 / 14 / 0
Регистрация: 30.09.2009
Сообщений: 89
15.04.2011, 12:42  [ТС]     Множества set, проверка принадлежности множеству #3
Спасибо, и все-таки они существуют, я так и знал)) сразу упрощает все и не надо задавать множества и что-то там проверять!
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
15.04.2011, 13:28     Множества set, проверка принадлежности множеству #4
http://www.cplusplus.com/reference/clibrary/cctype/
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 11:42     Множества set, проверка принадлежности множеству #5
Столкнулся с аналогичной ситуацией, только вместо банальной строки у меня в множестве объекты. Как быть в такой ситуации?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 11:48     Множества set, проверка принадлежности множеству #6
Цитата Сообщение от Zerstroer Посмотреть сообщение
Как быть в такой ситуации?
Создать множество возможных типов объектов и потом искать в множестве/множествах.
А вообще, твой вопрос похож на этот:
Я написал "Hello world!", вроде работает. Как теперь её переделать в СУБД с поддержкой TSQL?
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:11     Множества set, проверка принадлежности множеству #7
Спасет ли find в данной ситуации отца русской демократии?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.02.2012, 12:27     Множества set, проверка принадлежности множеству #8
Zerstroer, По идее вполне.
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30     Множества set, проверка принадлежности множеству #9
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:30     Множества set, проверка принадлежности множеству #10
Цитата Сообщение от ForEveR Посмотреть сообщение
А есть другие варианты?
Разумеется есть. Можно тип объекта хранить в самом объекте. Это ещё и самый эффективный и экономный способ. Если есть возможность добавить к объекту функцию GetType().
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:30     Множества set, проверка принадлежности множеству #11
Deviaphan, вообще-то ситуация будто бы и простая.
Есть контейнер set<MyClass> my_set с конечным числом объектов.
В программе мне нужно выявлять принадлежность объекта obj1 к my_set. Ищу наиболее простой способ это осуществить.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:32     Множества set, проверка принадлежности множеству #12
Цитата Сообщение от Zerstroer Посмотреть сообщение
принадлежность объекта obj1 к my_set
В таких условиях исключительно my_set.find(...);
Но "самоопределение" типа может быть более хорошим вариантом.
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 12:39     Множества set, проверка принадлежности множеству #13
GetType() - для чего?
Меня не интересует содержимое объекта. Меня интересует только принадлежность его к определенной фиксированной группе объектов и всё. Решение, предложенное для Опы - меня не устраивает, так как Опа в множестве хранил примитивные типы.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.02.2012, 12:44     Множества set, проверка принадлежности множеству #14
Цитата Сообщение от Zerstroer Посмотреть сообщение
для чего?
оК. Не GetType, а GetGroup. Т.е. объект может хранить в себе признак группы. Конечно, если один объект не может принадлежать нескольким группам.
У тебя всего два варианта, либо использовать множество объектов и проверять принадлежность этому множеству (не обязательно set, это может быть и Vector и хоть что), либо объект сам знает, к какому множеству он принадлежит и у него можно узнавать, а не принадлежит ли он этому множеству.
Первый способ подходит для любых объектов, даже если их код тебе не доступен. Второй способ более эффективный и по памяти и по скорости.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.02.2012, 13:05     Множества set, проверка принадлежности множеству #15
Deviaphan, Вообщем-то извращение при использовании std::set.
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 13:10     Множества set, проверка принадлежности множеству #16
Признак группы - не актуален.
Фиксированный список объектов задается в другом блоке программы.
В мой обработчик, попадает только набор объектов (в виде set) и сам объект.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.02.2012, 13:27     Множества set, проверка принадлежности множеству #17
Zerstroer, Ну очевидно find.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 14:28     Множества set, проверка принадлежности множеству
Еще ссылки по теме:

C++ Проверка на включение, множества
C++ Построение функции принадлежности нечеткого множества
C++ Как очистить содержимое множества set?

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

Или воспользуйтесь поиском по форуму:
Zerstroer
0 / 0 / 0
Регистрация: 15.02.2011
Сообщений: 7
20.02.2012, 14:28     Множества set, проверка принадлежности множеству #18
тогда вот такой вопрос:
find() - возвращает итератор? Как его обработать? С NULL сравнивать?

Добавлено через 9 минут
Нашел!
Сравнивать нужно с .end() этого же множества!
Yandex
Объявления
20.02.2012, 14:28     Множества set, проверка принадлежности множеству
Ответ Создать тему
Опции темы

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