logo

C++ STL の unowned_map

順序なしマップ キー値とマップされた値の組み合わせによって形成される要素を格納する、関連付けられたコンテナーです。キー値は要素を一意に識別するために使用され、マップされた値はキーに関連付けられたコンテンツです。キーと値は両方とも、事前定義またはユーザー定義の任意のタイプにすることができます。簡単に言えば、 順序なしマップ それ自体に要素を格納する辞書型のデータ構造のようなものです。これには連続するペア (キー、値) が含まれており、一意のキーに基づいて個々の要素を高速に取得できます。

Javaの逆文字列

内部的には unowned_map は Hash Table を使用して実装されており、マップに提供されたキーはハッシュ テーブルのインデックスにハッシュされます。そのため、データ構造のパフォーマンスはハッシュ関数に大きく依存しますが、平均するとコストがかかります。 検索、挿入、削除 ハッシュ テーブルからは O(1) になります。



注記: 最悪の場合、特に大きな素数の場合、時間計算量は O(1) から O(n) になる可能性があります。この状況では、TLE(Time Limit Exceeded) エラーの発生を避けるために、代わりにマップを使用することを強くお勧めします。

構文:

unowned_map 構文と例

unowned_map の構文



以下は、順序なしマップを示す C++ プログラムです。

C++






// C++ program to demonstrate> // functionality of unordered_map> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of STRING type> >// and mapped VALUE will> >// be of int type> >unordered_mapint>ウマップ; // [] 演算子を使用して値を挿入 umap['techcodeview.com'] = 10; umap['練習'] = 20; umap['貢献'] = 30; // (auto x : umap) cout の順序なしマップを走査します<< x.first << ' ' << x.second << endl; }>

>

>

出力

Contribute 30 Practice 20 techcodeview.com 10>
unowned_map 出力と例

unowned_map の出力

説明: この出力で正当化される具体的な点は、unordered_map の結果の値がランダムなキーから値への方法で生成されるのに対し、マップでは値とキーが順序付けられた方法で表示されるということです。

unowned_map と unowned_set の比較

順序なしマップ

順序なしセット

Unowned_map には、(キーと値) ペアの形式でのみ要素が含まれます。 Unowned_set には必ずしもキーと値のペアの形式の要素が含まれているわけではありません。これらは主にセットの有無を確認するために使用されます。
演算子「 []' マップ内に存在するキーの対応する値を抽出します。 要素の検索は、 探す () 関数。したがって、演算子[]は必要ありません。

注記: たとえば、個々の単語の頻度を数える問題を考えてみましょう。 unowned_map は使用できますが、カウントを保存できないため、unowned_set (または set) は使用できません。

unowned_map とマップ

順序なしマップ

地図

unowned_map キーは任意の順序で保存できます。 マップは一意のキーの順序付けられたシーケンスです
Unowned_Map は要素間の順序を維持できないため、不均衡なツリー構造を実装します。 マップはバランスの取れたツリー構造を実装しているため、(特定のツリーの走査によって) 要素間の順序を維持することができます。
unowned_map 操作の時間計算量は平均して O(1) です。 マップ操作の時間計算量は O(log n) です

unowned_map のメソッド

unowned_map で動作する多くの関数が利用可能です。その中で最も役立つものは次のとおりです。

    演算子 = 演算子 [] イテレータの容量の開始および終了の空のサイズ。 ルックアップのために検索してカウントします。 変更のために挿入および消去します。

以下の表は、unowned_map のメソッドの完全なリストを示しています。

メソッド/関数

説明

で() C++ のこの関数 unowned_map は、要素をキー k として持つ値への参照を返します。
始める() unowned_map コンテナ内のコンテナ内の最初の要素を指すイテレータを返します。
終わり() unowned_map コンテナ内のコンテナ内の最後の要素を過ぎた位置を指すイテレータを返します。
バケツ() マップ内でキー k を持つ要素が配置されているバケット番号を返します。
バケット数 Bucket_count は、合計数をカウントするために使用されます。 unowned_map 内のバケットの数。この関数に渡すパラメータは必要ありません
バケットサイズ unowned_map の各バケット内の要素の数を返します。
カウント() 指定されたキーを持つ unowned_map 内に存在する要素の数をカウントします。
等しい範囲 k と等しいキーを持つコンテナ内のすべての要素を含む範囲の境界を返します。
探す() 要素にイテレータを返します
空の() unowned_map コンテナー内のコンテナーが空かどうかを確認します
消去() unowned_map コンテナ内のコンテナ内の要素を消去する

C++11 ライブラリには、内部で使用されているバケット数、バケット サイズ、使用されているハッシュ関数やさまざまなハッシュ ポリシーを確認する関数も提供されていますが、実際のアプリケーションではあまり役に立ちません。 Iterator を使用して、unowned_map のすべての要素を反復処理できます。

C++


整数を文字列Javaに変換する方法



// C++ program to demonstrate> // Initialization, indexing,> // and iteration> #include> #include> using> namespace> std;> > // Driver code> int> main()> {> >// Declaring umap to be of> >// type key> >// will be of string type and> >// mapped value will be of double type> >unordered_mapdouble>umap = { //マップに要素を直接挿入 {'One', 1}, {'Two', 2}, {'Three', 3} }; // [] 演算子を使用して値を挿入 umap['PI'] = 3.14; umap['root2'] = 1.414; umap['root3'] = 1.732; umap['log10'] = 2.302; umap['loge'] = 1.0; // 挿入関数で値を挿入 umap.insert(make_pair('e', 2.718)); 文字列キー = 'PI'; // キーがマップイテレータに見つからない場合 // to end が返される if (umap.find(key) == umap.end()) cout<< key << ' not found '; // If key found then iterator to that // key is returned else cout << 'Found ' << key << ' '; key = 'lambda'; if (umap.find(key) == umap.end()) cout << key << ' not found '; else cout << 'Found ' << key << endl; // iterating over all value of umap unordered_mapdouble>::反復子 itr; コート<< ' All Elements : '; for (itr = umap.begin(); itr != umap.end(); itr++) { // itr works as a pointer to // pair type // itr->最初にキー部分を格納し、 // itr->2 番目に値部分 cout ' ' を格納します<< itr->2番<< endl; } }>

>

>

出力

Found PI lambda not found All Elements : e 2.718 loge 1 log10 2.302 Two 2 One 1 Three 3 PI 3.14 root2 1.414 root3 1.732>

個々の単語の頻度を調べる

単語の文字列が与えられた場合、タスクは個々の単語の頻度を見つけることです。

入力: str = オタクのためのオタク オタクのためのクイズ練習 QA;
出力: 個々の単語の頻度は、
(練習、1)
(2の場合)
(QA、1)
(クイズ、1)
(オタク、3)

以下は、上記のアプローチを実装するための C++ プログラムです。

C++




// C++ program to find freq> // of every word using unordered_map> #include> using> namespace> std;> > // Prints frequencies of> // individual words in str> void> printFrequencies(>const> string &str)> {> >// declaring map of type,> >// each word is mapped to its frequency> >unordered_mapint>単語頻度; // string stream を使用して入力を単語に分割します // 単語の分割に使用します stringstream ss(str); // 個々の単語を保存するには string word; while (ss>> word) wordFreq[word]++; // 単語と周波数のペアを反復処理し、 // それらを unowned_mapint>:: iterator p の形式で出力します。 for (p = wordFreq.begin(); p != wordFreq.end(); p++) cout<< '(' ', ' << p->2番<< ') '; } // Driver code int main() { string str = 'geeks for geeks geeks quiz ' 'practice qa for'; printFrequencies(str); return 0; }>

>

>

出力

(practice, 1) (for, 2) (qa, 1) (quiz, 1) (geeks, 3)>

unowned_map に関する最近の記事