Если вдруг нужно с нуля такую структуру сделать - я бы смотрел в сторону:
- хранить данные парами по значению в векторе + две мапы с указателями на ключи и значения + ремап при расширении вектора
- хранить данные парами по указателю на хипе, в векторе + две мапы с указателями
- какая-то своя структура данных на основе самобалансирующегося дерева, где у каждой ноды не два указателя, а четыре, два для ключа и два для значения
1) а вектора зачем? есть же map::extract