开发者

When does it make sense to use a map?

I am trying to r开发者_StackOverflow社区ound up cases when it makes sense to use a map (set of key-value entries). So far I have two categories (see below). Assuming more exist, what are they?

Please limit each answer to one unique category and put up an example.


Property values (like a bean)

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

Presence, with O(1) performance

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


Sparse Data Structures (e.g. a sparse array or a matrix):

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

Also, I would argue that the "Presence" example you listed is better done with a Set data structure (e.g. HashSet in Java or .NET) since the "mapping" part of the map is really not necessary.


Remembering function results (caching, buffering, memoization)

10 -> 2
20 -> 7
30 -> zeroesIn(factorial(30))


Conversion

peter -> pierre
john  -> jean
paul  -> paul


If your language allows both associative arrays and pointer to functions/procedures, you can use maps to build something similar to Object Oriented (see Perl for a classical example).

See here for a more detailed explanation.


Passing arbitrary number of optional parameters to a function, in a language which doesn't support them:

cars = findAvailableCars(make -> 'Toyota', model -> 'Prius', color -> 'green')


As Eric Petroelje said, your "presence" example is better suited to a Set than a Map.

However, if you want to keep track of the number of occurrences of things, use a Map. For example, you want to know how many times a given word appears in a document:

pseudocode:

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

then if I want to know how many times the word 'map' appears in the document, it would just be wordMap["map"]


A Map is one way of representing a graph. The keys are the nodes in the graph, and the value for a particular node N is a list of all the nodes that N connects to.


(Thanks for the retag, MatrixFrog.)

Dictionary (mapping a term to a definition)

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

Also in this category

EADDRINUSE    -> "Address in use." 
EADDRNOTAVAIL -> "Address not available."
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜