Я не эксперт по C ++, но, похоже, ваша проблема связана с копированием экземпляров Type
вместо ссылки / указателя на экземпляры Type
.
std::map<Type> myMap; // <-- this is wrong, since std::map requires two template parameters, not one
Если вы добавляете элементы на карту, а они не являются указателями, то я считаю, что вызывается конструктор копирования, и это, безусловно, приведет к задержкам с большой структурой данных. Вместо этого используйте указатель:
std::map<KeyType, ObjectType*> myMap;
Кроме того, ваш пример немного сбивает с толку, поскольку вы «вставляете» значение типа int
в карту, когда ожидаете значение типа Type
. Я думаю, что вы должны назначить ссылку на элемент, а не на индекс.
myMap[theType.key] = &myVector[i];
Обновление:
Чем больше я смотрю на ваш пример, тем больше смущаюсь. Если вы используете std :: map, тогда он должен принимать два типа шаблона:
map<T1,T2> aMap;
Так что вы ДЕЙСТВИТЕЛЬНО наносите на карту? map<Type, int>
или что-то еще?
Похоже, что вы используете Type.key
поле члена в качестве ключа к карте (это правильная идея), но если ключ того же типа, что и Type
, то вы не можете использовать его как ключ к карте. Так что key
является экземпляром Type
??
Кроме того, вы отображаете текущий векторный индекс на ключ на карте, что указывает на то, что вы просто хотите, чтобы индекс был вектором, чтобы впоследствии вы могли быстро получить доступ к этому местоположению индекса. Это то, что вы хотите сделать?
Обновление 2.0:
После прочтения вашего ответа кажется, что вы используете std::map<long,int>
, и в этом случае копирование структуры не выполняется. Кроме того, вам не нужно делать локальную ссылку на объект в векторе. Если вам просто нужен доступ к ключу, то получите к нему доступ, позвонив по номеру myVector[i].key
.