Вот есть структура Server_Type{ Id int, HTTP_Url string, Enabled int, Active int, HType int указывает на HTypes.id ... } пусть есть список таких структур, назовём его Server_List Мне надо выбрать все Server_Type из Server_List где Server_Type.Active=1; Как лучше: Держать в памяти 2 списка с active=0 и active=1 или таки бегать в цикле по одному?
а смысл? по моему достаточно сортировать список при создании (соотвественно, при добавлении новых элементов вставлять в нужное место)
Не очень понятен контекст, в котором это должно выполняться, но, по-моему, самое простое -- держать два списка: в одном активные сервера, а в другом -- нет.
rpy3uH, ну хотя бы хранить индекс первого элемента с active=0 (если с 1 вначале). Для быстрого доступа.
Mika0x65, да, наверное.. хотя если сервер был неактивен, а потом стал активен, не создадут ли два списка лишней путаницы?
rttgedt Не совсем понятно, какие у blacktelecom условия. Был неактивен, стал активен -- переносится в другой список. Возможно, потребуется какая-то синхронизация, если потоков много.
Если активных записей много, если всего записей мало - то не стоит париться. Если наоборот (записей много, из них активных мало) - то можно делать список активных. А лучше множество (set) указателей на элементы списка с Active == true Тогда смена признака активности выльется в модификацию одного булева поля и одной операции удаления или вставки в множество, которая выполняется быстро. Если подразумевается high concurrency - то имеет смысл потестить под нагрузкой обе реализации - не факт, что вторая будет быстрее.
насчет двух реализаций - хорошо придумано, щас буду тестить, скажу результаты. Тут еще вопрос чуть не встал. HTypes is ( HT_AUTHSERV, HT_MEDIASERV, HT_APPSERV...) То есть мне нужно иногда выбирать все активные серверы где HType = HT_AUTH или HT_MEDIASERV Проблему решил, сделав HType числом, в котором просто устанавливаются или снимаются нужные байты. Всё же склоняюсь к двум спискам. У меня 40 мегов оперативы и нет HDD