помесь map и vector
От: Аноним  
Дата: 02.10.07 03:42
Оценка:
Подскажите, плиз, как лучше решить проблему:

Нужен контейнер хранящий пары значений (Name=Value), удовлетворяющий трем условиям:
1. Быстрое получение value по name.
2. Иногда требуется возможность пройти по элементам контейнера в том же порядке, в каком они были добавлены в контейнер
3. Желательно при запросе отсутствующего name кидать исключение, а не добавлять пару с value по умолчанию. Но можно обойтись
без этого.

Пока вижу такое решение, но, так как я новичок в STL, думаю есть более красивое и правильное.
class CValue
{ CString m_strName;
  CString m_strValue;
  int     m_nSortOrder;
}
map<CString, CValue*> mapValues;

Первое условие выполняется, трудоемкость вроде такая же как у map.
Второе:
перегнать(отсортировать) указатели, например в вектор, в соответствии с m_nSortOrder. Как кстати правильно это сделать ?


Не нравиться, как минимум дублирование Name (ключ в map, член CValue), но если перегонять указатели в вектор, надо же потом как-то получить Name.

Надеюсь не сильно сумбурно получилось.
Re: помесь map и vector
От: jazzer Россия Skype: enerjazzer
Дата: 02.10.07 03:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, плиз, как лучше решить проблему:


А>Нужен контейнер хранящий пары значений (Name=Value), удовлетворяющий трем условиям:

А>1. Быстрое получение value по name.
А>2. Иногда требуется возможность пройти по элементам контейнера в том же порядке, в каком они были добавлены в контейнер
А>3. Желательно при запросе отсутствующего name кидать исключение, а не добавлять пару с value по умолчанию. Но можно обойтись
А>без этого.

boost::multi_index
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: помесь map и vector
От: Аноним  
Дата: 02.10.07 06:21
Оценка:
Здравствуйте, jazzer, Вы писали:

J>boost::multi_index

спасибо, то что надо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.