AOJ 0105 - Book Index 短くしたけどまだ長い

AOJ 0105

最初に書いてみたコード

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

int main(){
  std::string s;
  int p;
  std::map<std::string,std::vector<int> > m;
  while(std::cin>>s>>p,p!=0){//入力の終了をどうするか分からなかったのでp=0でテストできるようにした。
    m[s].push_back(p);
  }
  std::map<std::string,std::vector<int> >::iterator m_it = m.begin();
  while(m_it!=m.end()){
    std::cout<<(*m_it).first<<std::endl;
    std::sort((*m_it).second.begin(),(*m_it).second.end());
    std::vector<int>::iterator v_it = (*m_it).second.begin();
    while(v_it!=(*m_it).second.end()){
      std::cout<<*v_it;
      v_it++;
      (v_it==(*m_it).second.end())?std::cout<<std::endl:std::cout<<" ";
    }
    m_it++;
  }
  return 0;
}

上記の(*m_it).secondが多いのをvectorにいれておくことで短く

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>

int main(){
  std::string s;
  int p;
  std::map<std::string,std::vector<int> > m;
  while(std::cin>>s>>p,p!=0){
    m[s].push_back(p);
  }
  std::map<std::string,std::vector<int> >::iterator m_it = m.begin();
  while(m_it!=m.end()){
    std::cout<<(*m_it).first<<std::endl;
    std::vector<int> v = (*m_it).second;
    std::sort(v.begin(),v.end());
    std::vector<int>::iterator v_it = v.begin();
    while(v_it!=v.end()){
      std::cout<<*v_it;
      v_it++;
      (v_it==v.end())?std::cout<<std::endl:std::cout<<" ";
    }
    m_it++;
  }
  return 0;
}

それでも、嫌だったので禁断のusing namespace stdに手を出してしまった。あと括弧をなくしてみた。

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
  string s;
  int p;
  map<string,vector<int> > m;
  while(cin>>s>>p,p!=0)m[s].push_back(p);
  map<string,vector<int> >::iterator m_it = m.begin();
  while(m_it!=m.end()){
    cout<<(*m_it).first<<endl;
    vector<int> v = (*m_it).second;
    sort(v.begin(),v.end());
    vector<int>::iterator v_it = v.begin();
    while(v_it!=v.end())cout<<*v_it,v_it++,v_it==v.end()?cout<<endl:cout<<" ";
    m_it++;
  }
  return 0;
}

だけど、この問題vectorやmapを使わなくてもc言語みたいに解けると思う。
なので、明日あたりやってみる。