로딩중...
검색중...
일치하는것 없음
smultimap.hpp
이 파일의 문서화 페이지로 가기
1
2
#pragma once
3
4
#include <unordered_map>
5
#include "
core/common.hpp
"
6
7
namespace
by {
26
template
<
typename
K,
typename
V>
class
smultimap
{
27
BY(ME(
smultimap
))
28
29
public
:
30
struct
wrap
;
31
class
iterator
;
32
typedef
std::unordered_multimap<K, wrap> stlMap;
33
34
struct
wrap
{
35
wrap
() =
default
;
36
wrap
(
V
&&
newValue
);
37
wrap
(
const
wrap
& rhs);
38
wrap
(
wrap
&& rhs);
39
40
public
:
41
wrap
& operator=(
const
wrap
&);
42
wrap
& operator=(
wrap
&&);
43
44
public
:
45
void
clear();
46
47
public
:
48
const
K
* key =
nullptr
;
49
V
value;
50
wrap
* prev =
this
;
51
wrap
* next =
this
;
52
};
53
54
class
iterator
{
55
BY(ME(
iterator
))
56
typedef
smultimap<K, V>
owner
;
57
58
public
:
59
iterator
(
const
smultimap
*
owner
,
const
wrap
*
pair
,
nbool
isReversed);
60
iterator
(
const
smultimap
*
owner
,
const
wrap
*
pair
,
nbool
isReversed,
const
K
& key);
61
iterator
(
const
smultimap
*
owner
,
const
wrap
*
pair
,
nbool
isReversed,
const
K
* key);
62
friend
owner
;
63
64
public
:
65
V
& operator*();
66
V
* operator->();
67
68
iterator
& operator++();
69
iterator
operator++(
int
);
70
iterator
& operator--();
71
iterator
operator--(
int
);
72
iterator
operator+(
ncnt
step
);
73
74
bool
isEnd()
const
;
75
76
const
K
* getKey()
const
;
77
const
V
* getVal()
const
BY_CONST_FUNC
(getVal())
78
V
* getVal();
79
80
bool
operator!=(
const
iterator
& rhs)
const
;
81
bool
operator==(
const
iterator
& rhs)
const
;
82
83
private
:
84
iterator
& _step(
ncnt
step
,
nbool
isReversed);
85
static
const
K
& _getDummyKey();
86
87
private
:
88
const
owner
* _owner;
89
const
wrap
* _wrap;
90
nbool
_isReversed;
91
K
_key;
92
};
93
94
public
:
95
smultimap
() =
default
;
96
97
public
:
98
ncnt
size()
const
;
99
100
iterator
begin()
const
;
101
iterator
end()
const
;
102
iterator
begin(
const
K
& key)
const
;
103
iterator
begin(
const
K
* key)
const
BY_SIDE_FUNC
(key, begin(*key), begin());
104
105
iterator
rbegin()
const
;
106
iterator
rend()
const
;
107
iterator
rbegin(
const
K
& key)
const
;
108
iterator
rbegin(
const
K
* key)
const
BY_SIDE_FUNC
(key, rbegin(*key), rbegin());
109
110
void
insert(
const
K
& key,
V
&&
val
);
111
115
void
erase
(
const
K
& key);
116
void
erase
(
const
K
* it)
BY_SIDE_FUNC
(
erase
);
117
void
erase
(
const
iterator
& it);
118
void
erase
(
const
iterator
* it)
BY_SIDE_FUNC
(
erase
);
119
void
erase
(
const
iterator
& from,
const
iterator
&
to
);
120
void
erase
(
const
iterator
* from,
const
iterator
&
to
)
BY_SIDE_FUNC
(from,
erase
(*from,
to
),
void
());
121
void
erase
(
const
iterator
& from,
const
iterator
*
to
)
BY_SIDE_FUNC
(
to
,
erase
(from, *
to
),
void
());
122
void
erase
(
const
iterator
* from,
const
iterator
*
to
)
BY_SIDE_FUNC
(from&&
to
,
erase
(*from, *
to
),
void
());
123
124
iterator
find(
const
K
& key)
const
;
125
126
void
clear();
127
128
private
:
129
typename
stlMap::iterator _erase(
const
typename
stlMap::iterator&
e
);
130
void
_erase(
const
iterator
&
e
);
131
void
_link(
wrap
&
newTail
);
132
void
_unlink(
wrap
&
toDelete
);
133
iterator
_begin(
const
K
& key,
nbool
isReversed)
const
;
134
135
private
:
136
stlMap _map;
137
wrap
_end;
138
};
139
}
// namespace by
by::smultimap::iterator
Definition
smultimap.hpp:54
by::smultimap
Definition
smultimap.hpp:26
by::smultimap::erase
void erase(const K &key)
by::tnarr
Definition
tnarr.hpp:9
common.hpp
by::smultimap::wrap
Definition
smultimap.hpp:34
to Top