Comments今日の勉強会は豪華2本建て。後半は「連想配列」についてです。使い方C++では今まで扱ってきた固定長配列の他に、vectorという可変長配列を用いることができるようになっています。このvector、今までの配列とは毛色が結構違うので慣れが必要です。使う場合は#include<vector>を忘れずに。オブジェクト名;のように書きます。この時点では、大きさ0の空っぽの配列です。実際に要素を受け取って追加、出力してみましょう。入力を受け取らないと0を返すので、while文と組み合わせると入力が終わるまで受け取ることができます。末尾に追加するメソッドです。要素数を返してくれます。このプログラムは、与えられた入力をvectorに格納し、それを1行1つずつ表示するものです。]で位置(インデックス)を指定することで参照できます。配列は、(語弊がありますが)連続して置かれた変数の集まりだと思ってもらえればいいです。メモリ上では連続的に確保されているので、値の取り出しや探索にはインデックスを1~Nまで動かして取得したり探すことになり、\(O(N)\)だけかかります(線形探索)。連想配列はインデックスの代わりにキーというものを持ちます。キーと値がペアになって格納されています。N)\)になるので、より高速にデータの取り出しや探索が可能になります。何度も値の出し入れを行う場合などでは有効ですね。C++における連想配列クラスはmapです。オブジェクト名;のようにします。キーに対応する値を追加するには、以下のようにします。0(intのデフォルト値)値が設定されていないキーを指定した場合、値型のデフォルト値というのが返ってきます。座標圧縮ここでひとつ問題を解いてみましょう。大小関係を維持したまま、その差をぎゅっと縮めて値のとる範囲を狭めるという問題ですね。これは座標圧縮というテクニックで、探索時間を短くするのに役立ちます(問題名の座圧はそれが由来)。愚直な解法を考えると、まず、値を格納している配列をソートし、順番に値を割り当てていきます。もとの並び順を保持したもうひとつの配列の値と、割り当てた結果を照らし合わせ、割り当てた値を出力していくと答えになります。とる範囲が大きすぎる)。a[100000][2];という2次元配列の1番目にもとの値、2番目に割り当てた値を格納すればいいでしょう。C++標準ライブラリのデータ構造のひとつ、pairを使ってみましょう。pairクラスは、2つの値の組を効率よく扱えるクラスです。5*/それと、配列のソートですが、これにも便利な関数があります。比較関数)vectorのオブジェクトを(デフォルトでは)昇順にソートします。vectorの終点を返します。ソートの基準は比較関数というものに与えてやることで決めることもできるので、自分で調べてみましょう。実装していきましょう。