01串的排序问题_算法

 

01 串的排序问题:

Code:
  1. //首先按长度排序,   
  2. //长度一样,按'1'的个数排序,   
  3. //‘1’的个数一样时,就按ASCII排序   
  4. #include <iostream>   
  5. #include <string>   
  6. #include <set>   
  7. #include <algorithm>   
  8. #include <fstream>   
  9. //if there is not included fstream libary ,we will get the bottom error:   
  10. ///main.cpp|26|error: variable `std::ifstream cin' has initializer but incomplete type|   
  11. //||=== 完成的Build: 1 个错误, 0 个警告 ===|   
  12.   
  13. using namespace std;   
  14.   
  15. struct cmp//比较算法:从'1'的个数 按小到大排   
  16. {   
  17.     //重载()操作   
  18.     bool operator () (const string &s1,const string &s2)//返回1 ,0 ,-1   
  19.     {   
  20.         if(s1.length()!=s2.length())   
  21.           return s1.length()<s2.length();   //返回比较长度的逻辑值
  22.         int c1 = count(s1.begin(),s1.end(),'1');   
  23.         int c2 = count(s2.begin(),s2.end(),'1');   
  24.           return (c1!=c2?c1<c2:s1<s2); //c1等于c2时返回c1<c2的逻辑值,否者返回ASCII值
  25.   
  26.     }   
  27. };   
  28.   
  29. int main(int argc,char *argv[])   
  30. {   
  31.     multiset<string,cmp>ms;//Why choose multiset data struct in this place?   
  32.     ifstream cin("aaa.txt");   
  33.     string str;   
  34.     while(cin>>str)   
  35.     {   
  36.         ms.insert(str);   
  37.     }   
  38.     multiset<string,cmp>::iterator iter;   
  39.     for(iter=ms.begin();iter!=ms.end();iter++)   
  40.     {   
  41.         cout<<*iter<<endl;   
  42.     }   
  43.     return 0;   
  44. }   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值