我只是没有得到它 - 为什么这会初始化一个2参数值?
我知道那里有钥匙和价值......但我是否需要每次都专门给出钥匙?这不具备内部散列函数吗?
我有一个问题:"给定2个数组,找到常用数字+不同数字"。很简单。虽然我的问题实际上是实现了STL容器" unordered_map"因为我无法找到任何明确解释为什么它需要两个参数的东西。
我想要的是什么?做:
unordered_map<int, int> hash;
这样的事情让你可以得到要点。只是不确定为什么有两个值,如:
count_animals_in_area = fn (area, acc) ->
acc = case Map.has_key?(area, "duck") do
true ->
Map.put(acc, "ducks", (acc["ducks"] + area["duck"]))
false ->
acc
end
acc = case Map.has_key?(area, "goose") do
true ->
Map.put(acc, "geese", (acc["geese"] + area["goose"]))
false ->
acc
end
acc = case Map.has_key?(area, "cat") do
true ->
Map.put(acc, "cats", (acc["cats"] + area["cat"]))
false ->
acc
end
acc
end
count_animals_in_areas = fn(areas) ->
acc = %{ "ducks" => 0,
"geese" => 0,
"cats" => 0 }
IO.inspect Enum.reduce areas, acc, count_animals_in_area
end
t1 = [ %{"duck" => 3, "goose" => 4, "cat" => 1},
%{"duck" => 7, "goose" => 2},
%{"goose" => 12}]
IO.puts "JEA: begin"
count_animals_in_areas.(t1)
IO.puts "JEA: end"
感谢您的帮助!
答案 0 :(得分:2)
[...]但我是否需要每次都专门给出密钥?
是的!这就是地图的意义所在。如果您不关心密钥,那么您可能不想要地图,只需std::set
或std::unordered_set
。
答案 1 :(得分:1)
正如其他人所说,地图并不是你真正想要的。
他们所建议的是一个集合(或unordered_set)。
至少IMO,这也有点有问题。它显然更适合,但考虑到情况(你想要两个列表,找到它们包含的数字,然后找到交集/差异)你可能是最好将数字放入向量,然后使用sort
和unique
删除重复项。如果您需要执行插入和删除以及维护唯一性,set
或unordered_set
通常会更好。当/如果您可以存储所有数据,然后对其进行排序,然后确保唯一性时,向量往往会更好地工作 - 一旦您完成了该操作,您就不需要再次修改该列表。
最后,您还应该注意std::set_intersection
和std::set_difference
(或可能std::set_symmetric_difference
)。这些将采取一组已排序的输入(但不必然存储在std::set
中)并找到(显然足够)两个数字列表之间的交集和差异 - 确切地说你的结果显然需要什么。