Когда имеет смысл использовать карту? - PullRequest
6 голосов
/ 11 марта 2010

Я пытаюсь округлить случаи, когда имеет смысл использовать карту (набор записей значения ключа). Пока у меня есть две категории (см. Ниже). Предполагая, что больше существует, что они?

Пожалуйста, ограничьте каждый ответ одной уникальной категорией и приведите пример.


Значения свойства ( как боб )

age -> 30
sex -> male
loc -> calgary   

Присутствие, с производительностью O (1)

peter -> 1
john  -> 1
paul  -> 1

Ответы [ 8 ]

5 голосов
/ 11 марта 2010

Разреженные структуры данных (например, разреженный массив или матрица):

0 -> value
1 -> value
100 -> value
105 -> value

Кроме того, я бы сказал, что приведенный вами пример «Присутствия» лучше выполнять со структурой данных Set (например, HashSet в Java или .NET), поскольку часть «отображения» карты действительно не нужна.

3 голосов
/ 14 марта 2010

Запоминание результатов функции (кэширование, буферизация, памятка )

10 -> 2
20 -> 7
30 -> zeroesIn(factorial(30))
2 голосов
/ 14 марта 2010

Преобразование

peter -> pierre
john  -> jean
paul  -> paul
1 голос
/ 15 марта 2010

Передача произвольного числа необязательных параметров в функцию на языке, который их не поддерживает:

cars = findAvailableCars(make -> 'Toyota', model -> 'Prius', color -> 'green')
1 голос
/ 14 марта 2010

Если ваш язык допускает как ассоциативные массивы, так и указатель на функции / процедуры, вы можете использовать карты для создания чего-то похожего на Object Oriented (классический пример приведен в Perl).

Смотрите здесь более подробное объяснение .

0 голосов
/ 14 марта 2010

(Спасибо за ретаг, MatrixFrog.)

Словарь (сопоставление термина с определением)

"postulate" -> "demand or claim"
"consulate" -> "residence of a foreign official"

Также в этой категории

EADDRINUSE    -> "Address in use." 
EADDRNOTAVAIL -> "Address not available."
0 голосов
/ 14 марта 2010

Карта - это один из способов представления графика . Ключи - это узлы на графике, а значение для определенного узла N - это список всех узлов, к которым N подключается.

0 голосов
/ 14 марта 2010

Как сказал Эрик Петроэле, ваш пример «присутствия» лучше подходит для набора, чем для карты.

Однако, если вы хотите отслеживать количество вхождений вещей, используйте карту.Например, вы хотите узнать, сколько раз данное слово появляется в документе:

псевдокод:

wordMap = map()
for word in document:
    if wordMap.containsKey(word):
        wordMap[word]++
    else:
        wordMap[word] = 1

, а затем, если я хочу узнать, сколько раз появляется слово «карта»в документе это будет просто wordMap["map"]

...