steban
Степ, поддержу здесь Степанова в том плане, что не получится сделать единую коллекцию и не будет единого интерфейса. Ибо все коллекции того же STL (а их вполне можно взять за основу) - разные.
Даже итераторы для листа нельзя сравнивать на <>, только на == и !=, а для вектора, к примеру, можно. И это правильно.
К примеру, как будет работать предлагаемая коллекция, у которой ТипКлюча == число, а МодельХранения == список? Если она не будет работать, то теряет смысл общий интерфейс. Если она будет работать, но с затратами N - то это уже совсем плохо.
Таким образом, думаю, надо просто определиться, какие коллекции нам нужны. Мне лично не хватает одной - единственной коллекции, о которой я вчера уже упомянул.
Это вектор, заодно индексированный строкой ("ИменованныйВектор"). Можно будет использовать вместо структуры и СЗ, в том числе во множестве мест в ИТ. Прост в реализации, может вырождаться в просто "Вектор", если задавать пустые ключи, к примеру. Прост в применении, ибо жестко не требует наличия итераторов, достаточно индексов. Для реализации в icpp уже есть все, что нужно (CIStringMap/std::vector (или std::deque)). И т.д.
Именованный вектор также можно использовать как hash_set / hash_map. В принципе, структура - это по-сути и есть hash_map.
Конечно, есть задачи, где требуется вставка и удаление в начало (deque это решает), или в середину. Над списками и прочим можно еще подумать. Но еще интереснее подумать над алгоритмами, которые можно будет к этим контейнерам применить.
|