Хорошо .. Я согласен с мультииндексом, и это правильный способ сделать это.Тем не менее, для собеседования на работу, они, вероятно, хотят, чтобы вы подумали об этом и что-то объяснили, а не просто использовали повышение.Если они спрашивают о внутренностях повышения, это может быть неудобно, если вы не можете объяснить это должным образом.
Итак, вот возможное решение.
Прежде всего, не используйте для этого хеш-таблицу.Телефоны и имена могут быть легко отсортированы, и вам, вероятно, следует использовать сбалансированное дерево поиска или три, если вы хотите интерактивный поиск (http://en.wikipedia.org/wiki/Trie). ИМХО, в этом случае хеш-таблица - это большая трата пространства.
Пустьмы предполагаем, что имена уникальны, а числа уникальны. Затем вы можете сделать:
1- Структура данных для хранения ваших данных
struct Phone {
// implement the phone here whatever they need
// assume that whatever representation used can be converted into a unique id (number)
}; //
struct PhoneBookEntry {
std::string name;
Phone number;
};
2- Создать два дерева одно для имени иодин для телефона
BalancedSearchTree<PhoneBookEntry> tree_by_name;
BalancedSearchTree<PhoneBookEntry> tree_by_number;
3 Вот и все. Найдите в каждом дереве все, что вам нужно
bool PhoneBook::getByName(const std::string &name, PhoneBookEntry &o) {
tree_by_name.get(name, o);
return !o.empty();
}
bool PhoneBook::getByNumber(const Phone &p, PhoneBookEntry &o) {
tree_by_number.get(p, o);
return !o.empty();
}
Удачи