kms писал(а) 19. Августа 2008 :: 16:14:artbear писал(а) 19. Августа 2008 :: 04:30:Для нормальной работы с коллекциями не хватает методов поиска.
Предлагаю в Вектор/АссоциативныйВектор добавить методы
Найти(Значение) - возвращает индекс, если найдено, и -1, если не найдено.
НайтиПоАлгоритму(АлгоритмПоиска) - возвращает вектор с индексами найденных значений, если найдено, и пустой вектор, если не найдено.
Цитата:Что скажете?
1. Как должен осуществляться поиск? Линейно?
А если контейнер отсортирован? Бинарно? Это будет отдельный метод или модификация существующего?
2. Откуда должен осуществляться поиск?
С начала? С заданного индекса?
3. В каких пределах?
До конца? До заданного индекса?
4. Зачем возвращать
вектор найденных значений?
Может быть, мне нужно только первое и последнее значения?
5. Направление поиска?
Вперед? Назад?
6. А собственный функтор сравнения не захочется?
Для упорядочивания по алгоритму и последующему поиску?
7. А позиционирование типа lower_bound/upper_bound/equal_range не понадобится?
Короче, можно долго рассуждать.
Чтобы решить все это эффективно, нужно понятие итератора.
Точно так же, как оно нужно было бы и для ИТ.
Кстати, кроме поиска, итераторы нужны во множестве других операций.
Вот только всерьез думать над их дизайном пока некогда.
А делать по-быстрому не хотелось бы.
Дабы не плодить списки несовместимостей из-за изначально непроработанных решений.
P.S.
А может быть, нам хватает возможностей ИТ?
Отвечу по пунктам.
1. С точки зрения внешнего интерфейса нет разницы в методе поиска, это дело реализации
Но, естественно, хотелось бы эффективности - если сортирован, то бинарный, иначе обычный.
Или спец.параметр на усмотрение пользователя, который лучше знает, сортирована коллекция или нет.
2-3 Можно сделать два метода Найти и НайтиВИнтервале - внутренняя их реализация не сильно будет отличаться.
4. Вектор нужен потому, что операция поиска с произвольным функтором может выдавать сразу несколько результатов для различных значений, для этого и нужен вектор. Т.е. для универсальности.
5. Думаю, что вперед достаточно. Но можно и назад сделать в будущем.
6. Функтор сравнения был бы удобен, несомненно. Но скорее всего это излишество.
7. Нет, наверное, это также излишество.
8. Да, итераторы пригодились бы. Но и без них неплохо живется.
В данном случае считаю, что это лишнее усложнение.
9. По поводу ИТ - а нафига нам нужны тогда простые коллекции, если с ними нельзя выполнять даже операции поиска
ИТ все-таки более годен для более сложных вычислений и операций.
Методы поиска очень нужны, иначе операции поиска (пусть и бинарная) в режиме 1С выполняются долго