Manadar, 
In  _MapToString() you are checking if a key is a map or an array, though they can only be integers or strings. Also the function wasn't returning anything as you were only updating the $sOutput variable if it was a map or an array. 
Also _MapSearch() isn't using the $iCompare variable. 
Local $mMap[]
For $i = 0 To 19
	$mMap[$i] = $i
Next
ConsoleWrite(_MapToString($mMap) & @CRLF)
Func _MapToString(Const ByRef $mMap, $sDelim_Item = "|", $sDelim_Row = @CRLF)
	If $sDelim_Item = Default Then $sDelim_Item = "|"
	If $sDelim_Row = Default Then $sDelim_Row = @CRLF
	If Not IsMap($mMap) Then Return SetError(1, 0, -1)
	Local $sRet = "", _
			$vValue = 0
	For $vKey In MapKeys($mMap)
		$vValue = $mMap[$vKey]
		$sRet &= $vKey & $sDelim_Item
		__MapToString_Print($sRet, $vValue)
		$sRet &= $sDelim_Row
	Next
	$sRet = StringTrimRight($sRet, StringLen($sDelim_Row)) ; Strip the last delimiter.
	Return $sRet
EndFunc   ;==>_MapToString
Func __MapToString_Print(ByRef $sOutput, ByRef $vValue)
	Switch VarGetType($vValue)
		Case "Array"
			$sOutput &= "{Array}"
		Case "Map"
			$sOutput &= "{Map}"
		Case Else
			$sOutput &= $vValue
	EndSwitch
EndFunc   ;==>__MapToString_Print