C++での動的配列(set,map)の使い方についてまとめます。

setの使い方

setとは、自動でソートされる動的配列を扱うためのSTLです。

数学でいうところの"集合"に対応するものですが、setは要素数が有限です。

宣言

#include <set>
using namespace std;

set <string> s;

関数

要素数を調べる
s.size();
要素を追加する
s.insert("hoge");

同じ要素を追加しても、要素数は1つのまま。

s.insert("hoge");
s.insert("hoge");
s.size(); // = 1
要素を検索する
s.find("探すもの")

if( s.find( "hoge" ) == s.end() )
{
    cout << "Not Found" << endl;
}
else
{
    cout << "Find" << endl;
}
要素をすべてクリアする
s.clear();

よくある使い方

文字列Sのなかの文字の要素数を調べる。

int getNumber(string S) {

  set <string> s;
  for(int i=0; i<S.size(); i++) {
    s.insert(S[i]);
  }
  return s.size();
}

pairの使い方

pairは2つの値をペアで扱うためのSTLです。

宣言
#include <utility>
using namespace std;

pair <string, int> p;
参照
p.first();  // 一つ目の要素
p.second(); // 2つ目の要素
要素を追加する
p.first  = "hoge"
p.second = 3

pair<int, string>( "hoge", 3 );
p = make_pair("hoge",3);

mapの使い方

map とは、連想配列を扱うための STLです。

(キー, 値)のペアでデータが保持されます。「任意の型のキー」から「値」を引く辞書を作成できます。

setは(キー)のみを要素にしていますが、mapはpairを要素とします。

宣言
#include <map>
using namespace std;

map <string, int> m;
参照
m.first();  // キーへのアクセス
m.second(); // 値へのアクセス
要素を追加する
s["hoge"] = 3;
s.insert(pair<string, int>("hoge", 3));
s.insert(make_pair("hoge", 3));
要素を検索する

setと同じなので、省略。

要素をクリアする
m.clear();

よくある使い方

mapの要素にアクセスするには、イテレータを利用するのが便利です。

map<string, int>::iterater it;

また、要素の先頭アクセスするには、begin(),最後にアクセスするにはend()を利用します。

m.begin(); // 先頭要素にアクセス
m.end();   // 最後の要素にアクセス

文字列Sのなかの文字で一番数が多いものの最大値を求めます。

int getNumber(string S) {
    map <string, int> m;
    for(int i=0; i < S.size(); i++) {
      m[S[i]]++;
    }

    int max = 0;
    map<string, int>::iterator it;
    for(it = m.begin(); it!=m.end(); it++ ) {
      if( max < it->second ) max = it->second;
    }
    return max;
}