多对多关系的内存级存储结构

Eviltuzki 发布于 2015/09/18 11:44
阅读 186
收藏 0

一个同学被多个老师授课

一个老师有多名学生

现在有很多老师和学生

需要一种存储结构,能够快速找出某个学生的所有老师,这需要什么样的数据结构?

如果是数据库,可以直接映射多对多,但是要求是在内存级别操作

各位大神有什么办法么?

加载中
1
eechen
eechen
在内存文件系统/run/shm上创建一个SQLite数据库,不就是内存级别的SQL操作了吗?
或者用哈希表,以PHP为例:
<?php
header('Content-Type: text/plain; charset=utf-8');
$student = array(
	'3' => array(
		'id' => '3',
		'name' => '张三'
	),
	'4' => array(
		'id' => '4',
		'name' => '李四'
	)
);
$teacher = array(
	'5' => array(
		'id' => '5',
		'name' => '王五'
	),
	'6' => array(
		'id' => '6',
		'name' => '赵六'
	)
);
$relation = array(
	array(
		'student_id' => '3',
		'teacher_id' => '5',
		'course' => 'PHP Web开发'
	),
	array(
		'student_id' => '4',
		'teacher_id' => '5',
		'course' => 'PHP Web开发'
	),
	array(
		'student_id' => '3',
		'teacher_id' => '4',
		'course' => 'MySQL应用和开发'
	)
);
//查询id为3的学生的课程和任课老师
$id = 3;
$arr = array(
	'id' => $id,
	'name' => $student[$id]['name']
);
foreach($relation as $k => $v) {
	if($v['student_id']==$id) {
		$arr['course'][$k]['teacher_id'] = $v['teacher_id'];
		$arr['course'][$k]['course'] = $v['course'];
	}
}
print_r($arr);
//输出:
Array
(
    [id] => 3
    [name] => 张三
    [course] => Array
        (
            [0] => Array
                (
                    [teacher_id] => 5
                    [course] => PHP Web开发
                )

            [2] => Array
                (
                    [teacher_id] => 4
                    [course] => MySQL应用和开发
                )

        )

)


eechen
eechen
回复 @Eviltuzki : PHP的关联数组就是一个哈希表。
Eviltuzki
Eviltuzki
= =你这个PHP的例子感觉就是多对多数据库关系额。。。。第一种方案直接否了。。笔试这么答,肯定死。。。 哈希我只知道相当于一个变相的索引,你这个PHP例子就是哈希么?
0
青萍之末
青萍之末
multi_index_container
Eviltuzki
Eviltuzki
= =这个我先慢慢看看,有点复杂的样子
0
quanwei9958
quanwei9958
字典结构也可以凑合  Dictionary<string,List<string>>  学生 ->老师链
Eviltuzki
Eviltuzki
单向这样没问题,如果是双向就死了。。。
0
jQer
jQer

学生ID -> 学生数据: 学生名, 其他, "老师ID1, 老师ID2, 老师ID3"

老师ID -> 老师数据

返回顶部
顶部