Если вы не хотите изменять иерархию деревьев, используйте карту для хранения указателей на вершины: std::map<SearchKeyType,Vertex*> M
.
Каждый раз, когда вы добавляете вершину к своему дереву, вы также должны добавлять ее на свою карту. Это очень просто: M[key]=&vertex
. Чтобы найти элемент, используйте M.find(key);
или M[key];
, если вы уверены, что ключ существует.
Если в вашем дереве есть дубликаты ключей, вам следует использовать multimap .
Редактировать: Если размер вашего ключа слишком велик, вы можете использовать указатель на ключ вместо ключа:
inline bool comparisonFunction(SearchKeyType * arg1,SearchKeyType * arg2);
std::map<SearchKeyType *, Vertex *, comparisonFunction> M;
inline bool comparisonFunction(SearchKeyType * arg1,SearchKeyType * arg2)
{
return (*arg1)<(*arg2);
}
для поиска элемента со значением V
необходимо написать следующее:
Vertex * v = M[&V]; // assuming that element V exists in M