Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
multiset.hpp
[詳解]
1#include"../../kyopro_library/template.hpp"
2
3/// @brief std::multiset ラッパー
4template<typename T>
6 using multiset<T>::multiset;
8 MultiSet()=default;
9
10 /// @brief コンストラクタ
11 /// @param not_found 指定の値が見つからなかったときに返す値
12 MultiSet(T not_found=-1) {
13 this->not_found=not_found;
14 }
15
16 /// @brief 最小値を返す
17 T min() {
18 if(this->empty())return not_found;
19 return*this->begin();
20 }
21
22 /// @brief 最大値を返す
23 T max() {
24 if(this->empty()) return not_found;
25 return*this->rbegin();
26 }
27
28 /// @brief 最小値を返し、削除する
29 T pop_min() {
30 if(this->empty()) return not_found;
31 T ret=min();
32 cnt[ret]--;
33 this->erase(this->begin());
34 return ret;
35 }
36
37 /// @brief 最大値を返し、削除する
38 T pop_max() {
39 if(this->empty()) return not_found;
40 T ret=max();
41 cnt[ret]--;
42 this->erase(prev(this->end()));
43 return ret;
44 }
45
46 /// @brief x が含まれているか否かを返す
47 bool contains(T x) {
48 return this->find(x)!=this->end();
49 }
50
51 /// @brief x を削除する
52 /// @brief x が含まれていたか否かを返す
53 bool discard(T x) {
54 auto itr=this->find(x);
55 if(itr==this->end()) return false;
56 cnt[*itr]--;
57 this->erase(itr);
58 return true;
59 }
60
61 /// @brief x より大きい最小の値を返す
62 T gt(T x) {
63 auto itr=this->upper_bound(x);
64 if(itr==this->end()) return not_found;
65 return*itr;
66 }
67
68 /// @brief x 以上の最小の値を返す
69 T ge(T x) {
70 auto itr=this->lower_bound(x);
71 if(itr==this->end()) return not_found;
72 return*itr;
73 }
74
75 /// @brief x 以下の最大の値を返す
76 T le(T x) {
77 auto itr=this->upper_bound(x);
78 if(itr==this->begin()) return not_found;
79 return*prev(itr);
80 }
81
82 /// @brief x 未満最大の値を返す
83 T lt(T x) {
84 auto itr=this->lower_bound(x);
85 if(itr==this->begin()) return not_found;
86 return*prev(itr);
87 }
88
89 /// @brief x の個数を返す
90 int count(T x) {
91 return cnt[x];
92 }
93
94private:
95 map<T,int> cnt;
96};
std::multiset ラッパー
Definition multiset.hpp:5
T lt(T x)
x 未満最大の値を返す
Definition multiset.hpp:83
bool discard(T x)
x を削除する
Definition multiset.hpp:53
bool contains(T x)
x が含まれているか否かを返す
Definition multiset.hpp:47
T not_found
Definition multiset.hpp:7
T min()
最小値を返す
Definition multiset.hpp:17
T pop_max()
最大値を返し、削除する
Definition multiset.hpp:38
MultiSet(T not_found=-1)
コンストラクタ
Definition multiset.hpp:12
T pop_min()
最小値を返し、削除する
Definition multiset.hpp:29
T gt(T x)
x より大きい最小の値を返す
Definition multiset.hpp:62
T max()
最大値を返す
Definition multiset.hpp:23
MultiSet()=default
T le(T x)
x 以下の最大の値を返す
Definition multiset.hpp:76
int count(T x)
x の個数を返す
Definition multiset.hpp:90
T ge(T x)
x 以上の最小の値を返す
Definition multiset.hpp:69