Page List

Search on the blog

2010年8月1日日曜日

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

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

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

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

  1. int main(void) {  
  2. int input[] = { 1, 3, 4, 3, 2, 7, 5, 8, 8, 10, 2, 4, 1 };  
  3. VI myVec;  
  4.   
  5. int pre = 0;  
  6. forf(i, SIZE(input)) {  
  7.  bool in = false;  
  8.  foreach(itr, myVec) {  
  9.   if (*itr == input[i]) {  
  10.    in = true;  
  11.    break;  
  12.   }  
  13.  }  
  14.  if (!in)  
  15.   myVec.pb(input[i]);  
  16. }  
  17. foreach(itr, myVec)  
  18.  cout << *itr << endl;  
  19. }  


ヘタレ過ぎる・・・・

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


  1. int main(void) {  
  2. int input[] = {1,3,4,3,2,7,5,8,8,10,2,4,1};  
  3.   
  4. set<int> mySet;  
  5. forf(i, SIZE(input))  
  6.  mySet.insert(input[i]);  
  7.   
  8. foreach(itr, mySet)  
  9.  cout << *itr << endl;  
  10. }  

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

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

0 件のコメント:

コメントを投稿