![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| conio |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Уважаемые, подсобите! Начал разбираться с контейнерами, прочитал книженцию Страуструпа.
Придумал примерчик, по нему контейнер должен заполниться уникальными записями структуры, после чего нужно найти в этом контейнере одну из записей(и вытащить из нее последее значение)! Скомпилилось все без ошибок! Но ни одна из записей не находиться! Что не так сделал? Только сильно не ругайте подозреваю что ляпы присутствуют))! //--------------------------------------хэдер
//----------------------------------сpp
Это сообщение отредактировал(а) conio - 22.8.2007, 14:11 |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
1) Совершенно непонятно, зачем тебе set, если потом ищешь линейным поиском.
2) Зачем нарисовал оператор ==, если не пользуешься им? 3) Ищешь вроде mystruct, а сравниваешь с каким-то phone: if ((*iter).first== phone.first && (*iter).second== second.second) 4) Какой-то мутный у тебя оператор <: нет уверенности, что он строгий. А если это не так, то некоторые новые значения могут в set не попасть... или попасть совсем не туда, куда надо (а потом не найдутся - если set::find использовать). Оператор < должен однозначно упорядочивать значения. Кроме того, нехорошо, когда a == b и !(a < b) && !(b < a) дают неодинаковый результат. Второе выражаение - это эквивалентность элементов, как ее понимает set. Если очень нужна операция "равно", которая не совпадает с эквивалентностью по оператору <, дай ей другое имя! 5) Раз уж пишешь на С++, то делай нормальные объекты: Mystruct не помешал бы конструктор (вместо дебильной функции fill), операторы < и == определи на структуре, а не глобальными делай -------------------- ... |
|||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Большое спасибо за такой конструктивный ответ! Буду исправляться!
А какой STL контейнер наиболее подходит для линейного поиска? |
|||
|
||||
| Xenon |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Ты Страуструпа читал ли не между строк? Ужас ... Где инкапсуляция?
Если бы читал Страуструпа, так использовал бы уже готовые алгоритмы давно. Но если так сильно хочется имть велосипед ...
К тому же подключая все пространство имент при помощи using namespace std; у тебя получается конфликт имен ... есть такая функция std::find - она режется с твоей find, поэтому нужно либо менять название своей функции, либо не подключать СРАЗУ все пространство имен. Это сообщение отредактировал(а) Xenon - 22.8.2007, 14:56 |
||||
|
|||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Мне стало интересно можно ли переопределить итератор insert контейнера set, внутри моей структуры?
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Да это вобщем то понятно)) Я к тому чтобы внутри моей структуры был метод добавления в контейнер. А как я добьюсь токого эффекта с помощью оператора сравнения структур? Заранее спасбо)) |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
conio, твоя структура ничего не должна знать о контейнере.
|
|||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Хорошо, а если изменить реализацию.
Cделать структуру отдельно, и реализовать класс на ее основе. Как мне в интерфейс класса добавить возможность пополнения контейнера? Только с помощью оператора сравнения? |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Что? При чем тут оператор сравнения? Что ты хочешь сделать вообще объясни толком. Чтобы у твоего класса был метод addMeSuchACuteAndPrettyToANiceAndNiftyContainer(Container& cont)? Зачем?
|
|||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Мне нужна структура и чтобы в ее интерфейсе был метод добавления новой записи в контейнер!
|
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Не нужна тебе такая структура... И никому не нужна. Сам подумай: контейнеров есть много хороших и разных, стандартных и не очень. В какой именно будем добавлять? Во все? Так не выйдет... И не надо путать суп с мухами... -------------------- ... |
|||
|
||||
| conio |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 22.8.2007 Репутация: нет Всего: нет |
Спасибо всем за советы и за внимание! ...
по своей дилетантности не думал что структура и обьявленный контейнер по структуре должны быть самостоятельными обьектами. Думал что обьявил структуру, контейнер ... и все механизмы по работе с контайнером должны лежать в интерфейсе структуры, что оказывается неверным. Еще раз спасибо! |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |