dl
dl_unordered_map2.h
浏览该文件的文档.
1
12#pragma once
13
14#include <unordered_map>
15
16#include "dl_type.h"
17
18namespace dl
19{
21template <typename K, typename V>
23{
24public:
25 using K2 = const std::array<K, 2>&;
29 V* Get(K2 xy)
30 {
31 auto iter = _data.find(xy[1]);
32 if (iter == _data.end())
33 return nullptr;
34
35 auto iter1 = iter->second.find(xy[0]);
36 if (iter1 == iter->second.end())
37 return nullptr;
38
39 return &iter1->second;
40 }
41
45 V& Add(K2 xy)
46 {
47 return _data[xy[1]][xy[0]];
48 }
49
53 bool Add(K2 xy, const V& v)
54 {
55 auto& iter = _data[xy[1]];
56 auto iter1 = iter.insert({ xy[0], v });
57 return iter1.second;
58 }
59
63 bool Delete(K2 xy)
64 {
65 auto iter = _data.find(xy[1]);
66 if (iter == _data.end())
67 return false;
68
69 auto& container = iter->second;
70 auto iter1 = container.find(xy[0]);
71 if (iter1 == container.end())
72 return false;
73
74 container.erase(iter1);
75 if (container.empty())
76 _data.erase(iter);
77 return true;
78 }
79
81 auto& GetContainer() { return _data; }
82
86 bool IsEmpty() const
87 {
88 return _data.empty();
89 }
90
94 size_t GetYSize()
95 {
96 return _data.size();
97 }
98
102 std::size_t GetXSize(const K& y)
103 {
104 auto iter = _data.find(y);
105 if (iter == _data.end())
106 return 0;
107 return iter->second.size();
108 }
109
112 std::unordered_map<K, V>* GetContainerY(const K& y)
113 {
114 auto iter = _data.find(y);
115 if (iter == _data.end())
116 return nullptr;
117 return &iter->second;
118 }
119private:
120 std::unordered_map<K, std::unordered_map<K, V>> _data;
121};
122}
bool IsEmpty() const
返回y的数量
size_t GetYSize()
返回y的数量
auto & GetContainer()
返回容器,用于遍历
std::size_t GetXSize(const K &y)
返回y的子项数量,没有返回0
V * Get(K2 xy)
返回位置元素,失败返回nullptr
bool Delete(K2 xy)
删除位置元素,成功返回true
bool Add(K2 xy, const V &v)
添加元素,已有返回false
std::unordered_map< K, V > * GetContainerY(const K &y)
返回y的容器,失败返回nullptr
const std::array< K, 2 > & K2
V & Add(K2 xy)
返回位置元素,如果不存在就构造一个
通用类型