Search on the blog

2010年8月2日月曜日

知ってると便利なSTL(1) set

今日、こんな場面に出くわした。。

複数の自然数(ダブりあり)からなる入力を一意な集合で整理したい。。。
例えばこんな感じ。。
{1,2,3,4,1,2} -> {1,2,3,4}

最初こんなことしてしまった(笑)


int main(void) {
int input[] = { 1, 3, 4, 3, 2, 7, 5, 8, 8, 10, 2, 4, 1 };
VI myVec;

int pre = 0;
forf(i, SIZE(input)) {
bool in = false;
foreach(itr, myVec) {
if (*itr == input[i]) {
in = true;
break;
}
}
if (!in)
myVec.pb(input[i]);
}
foreach(itr, myVec)
cout << *itr << endl;
}


ヘタレ過ぎる・・・・

STLでsetという便利なものがあることを発見。
これを使うと一意な要素しか入力しないらしい。
setを使って書くとこんな感じ。。



int main(void) {
int input[] = {1,3,4,3,2,7,5,8,8,10,2,4,1};

set<int> mySet;
forf(i, SIZE(input))
mySet.insert(input[i]);

foreach(itr, mySet)
cout << *itr << endl;
}

若干、C++に見えない気がしますが、C++です(笑)
便利なマクロ使ってます。

このset意外と使う場面は多そうだ。

0 件のコメント:

コメントを投稿