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