C++STLのunordered_multimap swap()関数の使い方を解説
C++ STLのunordered_multimapにおけるswap()関数は、同じサイズ・同じ型の2つのmultimapコンテナ同士で要素を入れ替えるために使用される関数です。この記事では、swap()関数の基本的な使い方を、アルゴリズムとサンプルコードを交えてわかりやすく解説します。
アルゴリズム
swap()関数を使った処理の流れは以下の通りです。
開始
空のmapコンテナ m と m1 を宣言する。
m と m1 の両方に値を挿入する。
swap()関数を実行し、m と m1 の値を入れ替える。
入れ替え後の m の値を出力する。
入れ替え後の m1 の値を出力する。
終了。サンプルコード
以下のコードでは、2つのunordered_mapコンテナを宣言し、それぞれに値を挿入した後、swap()関数で中身を入れ替えています。
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int main() {
unordered_map<char, int> m,m1; // m, m1 を空のmapコンテナとして宣言
m.insert (pair<char, int>('b', 10)); // mapコンテナに値を挿入
m.insert (pair<char, int>('c',30));
m.insert (pair<char, int>('d',40));
m1.insert (pair<char, int>('a', 20));
m1.insert (pair<char, int>('e',70));
m1.insert (pair<char, int>('f',60));
m.swap(m1); // 2つのmapコンテナの値を入れ替える
cout << "\n Key and values of 1st set are:";
for (auto it = m.begin(); it != m.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} "; // 入れ替え後のmの値を出力
}
cout << "\n Key and values of 2nd set are:"; // 入れ替え後のm1の値を出力
for (auto it = m1.begin(); it != m1.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} ";
}
return 0;
}出力結果
上記のコードを実行すると、以下のように2つのコンテナの中身が入れ替わっていることが確認できます。unordered_mapはハッシュテーブルで実装されているため、要素の順序は実装依存となります。
Key and values of 1st set are: {f, 60} {a, 20} {e, 70}
Key and values of 2nd set are: {d, 40} {b, 10} {c, 30}まとめ
unordered_multimapのswap()関数を使えば、2つのコンテナ間で効率的に要素を交換できます。内部ではポインタやハンドルの付け替えのみが行われるため、要素を一つずつコピーするよりも高速に動作するのが特徴です。大量のデータを扱う場合にも、パフォーマンスを気にせず利用できる便利な関数といえるでしょう。
-
C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説
cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引
-
C++ STLのsinh()関数の使い方を徹底解説
sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin