-
Notifications
You must be signed in to change notification settings - Fork 26
map
laishikai edited this page Jul 5, 2019
·
1 revision
声明: map<int, StringA> aID2Name = new map<int, StringA>();
说明: 如果_TyKey为自定义的class, 需要实现 GetHashCode与Equals函数 例 class map_key { int m_nID; uint GetHashCode() { return m_nID; // 返回一个hash值 } bool Equals(map_key other) { return m_nID == other.m_nID; } };
templalte <class _TyKey, class _TyValue> // _TyKey与_TyValue 不支持list与 map的嵌套, 仅支持基础数据类型与自定义的class class map { // 取map的节点数量 public int Length; public int Length(); // 功能:下标引用, 如果节点不存在,就插入一个节点 public _TyValue &operator[](_TyKey key); // 功能:从后面有序插入 // 说明:如果已经存在key, 就更新变量 // 如果key节点不存在,就从末尾追加, 你可以将map理解成一个list public void push_back(_TyKey key, _TyValue value); // 功能:从前面有序插入 // 说明:如果已经存在key, 就更新变量 // 如果key节点不存在,就从前端插入, 你可以将map理解成一个list public void push_front(_TyKey key, _TyValue value); // 功能:从指定位置后面插入 public void insert_back(_TyKey where, _TyKey key, _TyValue value); // 功能:从指定位置前面插入 public void insert_front(_TyKey where, _TyKey key, _TyValue value); // 功能:删除指定的节点 public void remove(_TyKey key); // 功能:删除所有的节点 public void RemoveAll(); // 功能:返回首节点 public iterator begin(); // 功能:查找指定KEY值的节点 public iterator find(_TyKey key); // 功能:测试是不是存在指定Key值的节点 public bool ContainKey(_TyKey key); // 功能:预分配hash数组,用于性能优化 // 说明:如果你大致知道总的节点的数量,预先设置一下总的节点数量,有利于优化插入的性能 public void Reserve(int nSize); // 功能:插入完成的优化 // 参数:nMaxSize - hash数组的最大长度(内存限制,以免优化后内存大副增加) // 说明:调用这个接口可以优化hash数组,减少冲突,提升查询性能,对于节点数量巨大且查询非常频繁的map来说,是很有效的 public void Optimize(int nMaxSize); };
// hash_map专用迭代器 class iterator { public void operator ++(); // 自增 // 功能:测试迭代器是不是有效 public bool IsValid(); // 功能:测试迭代器是不是有效 // 说明:直接将对象作bool变量测试, 如果为true表示有效, 为false表示无效 pulbic operator bool(); // 功能:返回迭代器指向的节点的key public _TyKey key; // 功能:返回迭代器指向的节点的value public _TyValue value; }; // 说明:iterator是安全的,相对于C#或C++的std::map来说,可以在循环体中删除map的节点而不影响迭代器遍历操作,是不是很方便啊,哈哈 例: for(iterator it = map.begin(); it; ++it) { if(it.key == 5) { map.remove(it.key); // 这样删除不影响遍历,也不会崩溃 map.remove(12); // 这样删除也不会影响遍历,也不会崩溃 } }