|
|
@ -27,7 +27,11 @@ protected: |
|
|
|
size_type nMaxSize; |
|
|
|
size_type nMaxSize; |
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
|
public: |
|
|
|
limitedmap(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; } |
|
|
|
limitedmap(size_type nMaxSizeIn) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
assert(nMaxSizeIn > 0); |
|
|
|
|
|
|
|
nMaxSize = nMaxSizeIn; |
|
|
|
|
|
|
|
} |
|
|
|
const_iterator begin() const { return map.begin(); } |
|
|
|
const_iterator begin() const { return map.begin(); } |
|
|
|
const_iterator end() const { return map.end(); } |
|
|
|
const_iterator end() const { return map.end(); } |
|
|
|
size_type size() const { return map.size(); } |
|
|
|
size_type size() const { return map.size(); } |
|
|
@ -38,13 +42,12 @@ public: |
|
|
|
{ |
|
|
|
{ |
|
|
|
std::pair<iterator, bool> ret = map.insert(x); |
|
|
|
std::pair<iterator, bool> ret = map.insert(x); |
|
|
|
if (ret.second) { |
|
|
|
if (ret.second) { |
|
|
|
if (nMaxSize && map.size() > nMaxSize) { |
|
|
|
if (map.size() > nMaxSize) { |
|
|
|
map.erase(rmap.begin()->second); |
|
|
|
map.erase(rmap.begin()->second); |
|
|
|
rmap.erase(rmap.begin()); |
|
|
|
rmap.erase(rmap.begin()); |
|
|
|
} |
|
|
|
} |
|
|
|
rmap.insert(make_pair(x.second, ret.first)); |
|
|
|
rmap.insert(make_pair(x.second, ret.first)); |
|
|
|
} |
|
|
|
} |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
void erase(const key_type& k) |
|
|
|
void erase(const key_type& k) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -81,7 +84,7 @@ public: |
|
|
|
size_type max_size() const { return nMaxSize; } |
|
|
|
size_type max_size() const { return nMaxSize; } |
|
|
|
size_type max_size(size_type s) |
|
|
|
size_type max_size(size_type s) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (s) |
|
|
|
assert(s > 0); |
|
|
|
while (map.size() > s) { |
|
|
|
while (map.size() > s) { |
|
|
|
map.erase(rmap.begin()->second); |
|
|
|
map.erase(rmap.begin()->second); |
|
|
|
rmap.erase(rmap.begin()); |
|
|
|
rmap.erase(rmap.begin()); |
|
|
|