KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
Kisaragi_Lib::OrderedMap< KeyType, ValueType > クラステンプレート

順番を持つ連想配列 [詳解]

#include <OrderedMap.hpp>

公開メンバ関数

void Push (KeyType _key, ValueType _value)
 要素を末尾に追加する.
 
void Erase (KeyType _key)
 要素を削除する.
 
void Clear ()
 配列をクリアする
 
bool FindKey (const KeyType &_key)
 _key要素があるか検索する
 
 operator std::vector< ValueType > & ()
 要素を配列として扱う
 
ValueType & operator[] (KeyType _key)
 連想配列の要素を取得する
 
void SwapKeyOrder (KeyType _key1, KeyType _key2)
 要素順を変更する.
 
const std::vector< KeyType > & KeyOrder ()
 現在のkey順を取得する
 

非公開変数類

std::unordered_map< KeyType, unsigned int > keyToIndex
 
std::vector< KeyType > keyOrder
 
std::vector< ValueType > value
 

詳解

template<typename KeyType, typename ValueType>
class Kisaragi_Lib::OrderedMap< KeyType, ValueType >

順番を持つ連想配列

テンプレート引数
KeyType連想配列のKey
ValueType連想配列の要素

関数詳解

◆ Push()

template<typename KeyType, typename ValueType>
void Kisaragi_Lib::OrderedMap< KeyType, ValueType >::Push ( KeyType _key,
ValueType _value )
inline

要素を末尾に追加する.

引数
_key引数
_value要素
42 {
43 if (keyToIndex.count(_key))
44 {
45 return;
46 }
47
48 keyToIndex.emplace(_key, keyOrder.size());
49 keyOrder.push_back(_key);
50 value.push_back(_value);
51 }
順番を持つ連想配列
Definition OrderedMap.hpp:21
std::vector< KeyType > keyOrder
Definition OrderedMap.hpp:27
std::vector< ValueType > value
Definition OrderedMap.hpp:30
std::unordered_map< KeyType, unsigned int > keyToIndex
Definition OrderedMap.hpp:24

◆ Erase()

template<typename KeyType, typename ValueType>
void Kisaragi_Lib::OrderedMap< KeyType, ValueType >::Erase ( KeyType _key)
inline

要素を削除する.

引数
_key削除する要素のKey
58 {
59 if (!keyToIndex.count(_key))
60 {
61 return;
62 }
63
64 //引数を記憶
65 unsigned int index = keyToIndex[_key];
66 //末尾要素の引数を記憶
67 unsigned int lastIndex = keyToIndex.size() - 1;
68
69 //自身が末尾の場合 or 自身のみしか格納してない場合.
70
71 //自身が末尾要素でない場合
72 if (index != lastIndex)
73 {
74 //削除するKey以降のkeyToIndexを削除後に合わせる
75 for (int i = index + 1; i <= lastIndex; i++)
76 {
77 //indexを1下げる
79 }
80 }
81
82 //各配列の削除処理を行う.
83 {
84 //要素の削除
85 value.erase(value.begin() + index);
86 //疎配列の削除
87 keyOrder.erase(keyOrder.begin() + index);
88 //Keyの逆引きを削除
89 keyToIndex.erase(_key);
90 }
91 }

◆ Clear()

template<typename KeyType, typename ValueType>
void Kisaragi_Lib::OrderedMap< KeyType, ValueType >::Clear ( )
inline

配列をクリアする

97 {
98 keyToIndex.clear();
99 keyOrder.clear();
100 value.clear();
101 }

◆ FindKey()

template<typename KeyType, typename ValueType>
bool Kisaragi_Lib::OrderedMap< KeyType, ValueType >::FindKey ( const KeyType & _key)
inline

_key要素があるか検索する

引数
_key検索したい要素のkey
戻り値
存在する : true,存在しない : false
109 {
110 return keyToIndex.count(_key);
111 }

参照元 operator[]().

◆ operator std::vector< ValueType > &()

template<typename KeyType, typename ValueType>
Kisaragi_Lib::OrderedMap< KeyType, ValueType >::operator std::vector< ValueType > & ( )
inline

要素を配列として扱う

121 {
122 return value;
123 }

◆ operator[]()

template<typename KeyType, typename ValueType>
ValueType & Kisaragi_Lib::OrderedMap< KeyType, ValueType >::operator[] ( KeyType _key)
inline

連想配列の要素を取得する

引数
_key取得したい要素のkey
戻り値
取得した要素
131 {
132 if (!FindKey(_key))
133 {
134 assert(false);
135 }
136
137 return value[keyToIndex[_key]];
138 }
bool FindKey(const KeyType &_key)
_key要素があるか検索する
Definition OrderedMap.hpp:108

◆ SwapKeyOrder()

template<typename KeyType, typename ValueType>
void Kisaragi_Lib::OrderedMap< KeyType, ValueType >::SwapKeyOrder ( KeyType _key1,
KeyType _key2 )
inline

要素順を変更する.

引数
_key1変更したい要素のKey
_key2変更したい要素のKey
153 {
154 //keyが存在するなら.
155 if (keyToIndex.count(_key1)==1 && keyToIndex.count(_key2) == 1)
156 {
157 //順番を入れ替える.
160
161 //対応処理.
162 unsigned int tmp = value[_key1];
164 value[_key2] = tmp;
165
166 unsigned int tmpIndex = keyToIndex[_key1];
169 }
170 }

◆ KeyOrder()

template<typename KeyType, typename ValueType>
const std::vector< KeyType > & Kisaragi_Lib::OrderedMap< KeyType, ValueType >::KeyOrder ( )
inline

現在のkey順を取得する

戻り値
現在のkey順の配列
177 {
178 return keyOrder;
179 }

メンバ詳解

◆ keyToIndex

template<typename KeyType, typename ValueType>
std::unordered_map<KeyType, unsigned int> Kisaragi_Lib::OrderedMap< KeyType, ValueType >::keyToIndex
private

◆ keyOrder

template<typename KeyType, typename ValueType>
std::vector<KeyType> Kisaragi_Lib::OrderedMap< KeyType, ValueType >::keyOrder
private

◆ value

template<typename KeyType, typename ValueType>
std::vector<ValueType> Kisaragi_Lib::OrderedMap< KeyType, ValueType >::value
private

このクラス詳解は次のファイルから抽出されました: