Я расширяю уже существующий код на C++. Один из членов класса имеет тип вектора другого класса объектов:использовать карту вместо вектора
class Road
{
....
vector<Link*> links; //Link is just another class
}
Остальные модули используют этот класс и его член через много итераторы последовательности. Теперь, расширяя код, мне нужно добавить элемент в класс Link, называемый linkID, и использовать этот идентификатор ссылки, чтобы найти/получить доступ к моим объектам «Ссылка».
Проблема: Я не собираюсь искать объект Link (используя LinkID) в векторе, итерации по миллионам элементов, чтобы найти конкретный объект Link. Лучшим решением является «карта»! правильно?
....
map<linkID,*link> links
....
lnk=links[linkID]
.........
Но проблема в том, что я не могу изменить текущий исходный код, за исключением очень незначительных модификаций Лика добавления LinkId и т.д.
Так что мой очевидный вопрос: можно ли использовать карту вместо вектора (любой как). Другими словами, я хочу создать карту, заполнить ее и позже рассматривать ее как вектор. возможное? Благодарю вас за комментарии
До тех пор, пока код, который у вас есть, реализован умно, т.е.: не полагаясь на случайное поведение итератора 'std :: vector', просто изменяя тип, должен делать трюк. В конечном итоге вам придется пересмотреть все случаи, когда вы полагайтесь на последовательный характер контейнера, но тогда вы не можете ему помочь, если существующий код полагается на это поведение, он плохо написан в первую очередь. –
Я согласен с Als выше. Однако это больше, чем просто случайное поведение итератора. Например, код делает что-то вроде 'links.push_back (ptr)'? Кроме того, код, основанный на позиционном доступе к ссылкам? – Kaz
@ KAZ FYI, linkID - строка, подобная «lnk001», поступающая из XML и используемая позже как ПК таблицы БД. – rahman