Search the values in pe.greaters from the most smaller elements that have a value.

Elements without values are ignored.

Basically, values defined in nearest greater elements of pe are inherited.

var pos = new POSet[String]
pos.add_chain(["E", "D", "C", "B", "A"])
pos.add_chain(["D", "X", "B"])

var map = new MultiHashMap[String, String]
map["A"].append(["a", "1"])
map["C"].append(["c", "2"])
map["X"].append(["x", "2"])
map["E"].add "e"

assert map.lookup_joined_values(pos["B"]).has_exactly(["a", "1"])
assert map.lookup_joined_values(pos["C"]).has_exactly(["c", "2"])
assert map.lookup_joined_values(pos["D"]).has_exactly(["c", "x", "2"])

Property definitions

more_collections $ MultiHashMap :: lookup_joined_values
	# Search the values in `pe.greaters` from the most smaller elements that have a value.
	#
	# Elements without values are ignored.
	#
	# Basically, values defined in nearest greater elements of `pe` are inherited.
	#
	# ~~~
	# var pos = new POSet[String]
	# pos.add_chain(["E", "D", "C", "B", "A"])
	# pos.add_chain(["D", "X", "B"])
	#
	# var map = new MultiHashMap[String, String]
	# map["A"].append(["a", "1"])
	# map["C"].append(["c", "2"])
	# map["X"].append(["x", "2"])
	# map["E"].add "e"
	#
	# assert map.lookup_joined_values(pos["B"]).has_exactly(["a", "1"])
	# assert map.lookup_joined_values(pos["C"]).has_exactly(["c", "2"])
	# assert map.lookup_joined_values(pos["D"]).has_exactly(["c", "x", "2"])
	# ~~~
	fun lookup_joined_values(pe: POSetElement[K]): Set[V]
	do
		var res = new Set[V]
		for k in pe.poset.select_smallest(filter_keys(pe.greaters)) do res.add_all self[k]
		return res

	end
lib/more_collections/more_collections.nit:107,2--134,4