C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 40 を表示中)
■20963 / )  Re[1]: mapの使い方教えてください
□投稿者/ επιστημη (1106回)-(2008/06/21(Sat) 12:38:24)
επιστημη さんの Web サイト
> <vector>を使ったソースは出来たのですが、<map>を使って書き直したいと思ってます。

vectorのまんまでも、stringとpair使ってちょいちょいといぢれば
かなりコンパクトに書けますですよ。

#include <vector>
#include <fstream>
#include <iostream>
#include <string>
#include <utility>
#include <algorithm>

using namespace std;

struct record {
  pair<string,string> key;
  int                 count;
};

bool operator==(const record& x, const record& y) {
  return x.key == y.key;
}

static const string MESHKEYWORD = "メッシュ";
static const string ERRKEYWORD  = "ERROR";

int main() {
  string str;
  record rec;
  vector<record> ary;

  ifstream fin("Data001.txt");
  if ( !fin ) {
    return 1;
  }
  while ( getline(fin,str) ) {
    if( str.find(MESHKEYWORD) == 0 ) {
      rec.key.first = str.substr(10,8); 
    }
    if ( str.find(ERRKEYWORD) == 0) {
      rec.key.second = str.substr(6,5);
      vector<record>::iterator iter = find(ary.begin(),ary.end(),rec);
      if ( iter != ary.end() ) {
        iter->count++;
      } else {
        rec.count = 1;
        ary.push_back(rec);
      }
    }
  }
  fin.close() ;
  for( vector<record>::iterator iter = ary.begin(); iter != ary.end(); ++iter ) {
    cout << iter->key.first << '\t'
         << iter->key.second << '\t'
         << iter->count << "件"
         << endl;
  }  
  return 0;  
}

返信 編集キー/


管理者用

- Child Tree -