Number /
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
マップの実装だが詳細はそれぞれ別(Cは二分木構造)
$ ./test bean = mame egg = (not found) $
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 二分木によるマップ実装 */
typedef struct st_map {
struct st_map * lnode;
struct st_map * rnode;
char * key;
char * value;
} * Map;
/* ノードを追加 */
Map create_node()
{
Map mp;
mp = (Map)malloc(sizeof(struct st_map));
mp->lnode = NULL;
mp->rnode = NULL;
mp->key = NULL;
mp->value = NULL;
return mp;
}
/* 指定のノードにセット */
void map_write(Map m, char * key, char * value)
{
if (m == NULL) {
m = create_node();
}
m->key = (char *)malloc(strlen(key)+1);
m->value = (char *)malloc(strlen(value)+1);
sprintf(m->key, "%s", key);
sprintf(m->value, "%s", value);
return;
}
/* マッピング */
void map_put(Map m, char * key, char * value)
{
if (m->key == NULL) {
map_write(m, key, value);
return;
}
int cmp = strcmp(m->key, key);
if (cmp == 0) {
/* 登録済みは上書き */
map_write(m, key, value);
} else if (cmp < 0) {
if (m->lnode == NULL) {
m->lnode = create_node();
}
map_put(m->lnode, key, value);
} else if (cmp > 0) {
if (m->rnode == NULL) {
m->rnode = create_node();
}
map_put(m->rnode, key, value);
}
}
/* マッピングされた値を取得 */
char * map_get(Map m, char * key)
{
Map mp = m;
int cmp;
for (;;) {
if (mp == NULL || mp->key == NULL) break;
cmp = strcmp(mp->key, key);
if (cmp < 0) {
mp = mp->lnode;
} else if (cmp > 0) {
mp = mp->rnode;
} else {
return mp->value;
}
}
return "(not found)";
}
/* 実行 */
int main()
{
Map dict;
char key[32];
dict = create_node();
map_put(dict, "apple", "ringo");
map_put(dict, "bean", "mame");
map_put(dict, "candy", "ame");
map_put(dict, "drink", "nomimono");
sprintf(key, "bean");
printf("%s = %s\n", key, map_get(dict, key));
sprintf(key, "egg");
printf("%s = %s\n", key, map_get(dict, key));
return 0;
}
#include <iostream>
#include <string>
#include <map>
using namespace std; // 読みやすさのため
string map_get(map<string, string> & m, string key)
{
string s = m[key];
if (s.length() == 0) {
return string("(not found)");
}
return s;
}
int main()
{
map<string, string> dict;
string key;
dict["apple"] = "ringo";
dict["bean"] = "mame";
dict["candy"] = "ame";
dict["drink"] = "nomimono";
key = "bean";
cout << key << " = " << map_get(dict, key) << endl;
key = "egg";
cout << key << " = " << map_get(dict, key) << endl;
return 0;
}
import java.util.*;
// Stringだけのマップ
class StringMap {
Map map;
StringMap() {
map = new HashMap();
}
void put(String key, String value) {
map.put(key, value);
}
String get(String key) {
String s = (String)map.get(key);
if (s == null) {
return "(not found)";
}
return s;
}
}
class Main {
public static void main(String[] args) {
StringMap dict = new StringMap();
String key = "";
dict.put("apple", "ringo");
dict.put("bean", "mame");
dict.put("candy", "ame");
dict.put("drink", "nomimono");
key = "bean";
System.out.println(key + " = " + dict.get(key));
key = "egg";
System.out.println(key + " = " + dict.get(key));
}
}
# 冗長になるのでクラスにしない
sub map_get {
my $map = shift;
my $key = shift;
my $value = $map->{$key};
if ($value eq "") {
return "(not found)";
}
return $value;
}
my %dict = ();
my $key = "";
$dict{'apple'} = "ringo";
$dict{'bean'} = "mame";
$dict{'candy'} = "ame";
$dict{'drink'} = "nomimono";
$key = "bean";
printf"%s = %s\n", $key, map_get(\%dict, $key);
$key = "egg";
printf"%s = %s\n", $key, map_get(\%dict, $key);
# 定義追加
class Hash
def get(key)
if key?(key)
return fetch(key)
else
return "(not found)"
end
end
end
dict = Hash.new
dict["apple"] = "ringo"
dict["bean"] = "mame"
dict["candy"] = "ame"
dict["drink"] = "nomimono"
key = "bean"
puts key + " = " + dict.get(key)
key = "egg"
puts key + " = " + dict.get(key)
最終更新日 : 2004.08.23

Number /
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
copyright 2000-2005
ARGIUS project