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;
}