题目如下:设计一双向map;
1,key可以找到value,value也可以找到key;
2,key和value的对应关系是多对多的关系;
3,key的值为1000万左右,最大为2000万;
4,value为char[128],最多为1000万个;
5,尽量对设计进行优化;
1 class Data
2 {
3 public:
4 Data(char *);
5 ~Data();
6 Data &operator=(char *);
7 //比较两个对象是否相等,如果指针相同则相等,如果指针不同,内容相同,也是相等!!
8 bool operatoe==(const Data &tmpdata)const
9 {
10 if(tmpdata.m_lpdata == this->m_lpdata)
11 return true;
12 if(tmpdata.m_lpdata == NULL || this->m_lpdata == NULL)
13 return false;
14 if(memcmp(tmpdata.m_lpdata,this->m_lpdata,128)!=0)
15 return false;
16 return true;
17 };
18 bool operatoe<(const Data &tmpdata)const
19 {
20 if(tmpdata.m_lpdata == this->m_lpdata)
21 return false;
22 if(tmpdata.m_lpdata == NULL || this->m_lpdata == NULL)
23 return false;
24 if(memcmp(this->m_lpdata,tmpdata.m_lpdata,128)<0)
25 return true;
26 return false;
27 };
28 private:
29 char *m_lpdata;
30 Data();
31 };
32 //内存管理,管理所有存储数据;该处可以简单实现,也可复杂实现;看实际情况;
33 class MemManager
34 {
35 };
36 class DoubleLinkMap
37 {
38 public:
39 DoubleLinkMap();
40 ~DoubleLinkMap();
41 private:
42 //内存管理
43 MemManager m_memmanager;
44 //数据结构
45 #define MAXKEYVALUE 20000000
46 std::list<char *> m_KeyArray[MAXKEYVALUE];
47 std::multimap<Data,int> m_mulmap_value_key;
48 };
49
对以上数据结构说明:1,由key获取value,直接访问m_KeyArray,其下标为key,那么得到的值为list,该list为指定key的所有value指针组成的list;可以由指针直接获取到数据;
2,由数据获取key,使用m_mulmap_value_key的lower_bound及upper_bound操作,直接可以获取到指定Data的所有key;主要实现了Data的==及<操作运算符,这两个运算符优先判断指针是否相等,后判断数据是否的大小;3,当对数据进行删除操作时,比较麻烦些,如果删除指定key的所有value,那么需要通过m_KeyArray找到所有value的指针,然后再挨个删除所有指针在m_mulmap_value_key里的映射;注意,删除时需要判断key是否相等再删除;
4,对内存管理这里有了一个说明,可以对存储所有value的内存进行优化;暂时没有写关于内存管理的部分;