一道字符串排序题(对sort函数的运用)

134 阅读1分钟

sort()函数常用情形:

对 [first, last) 区域内的元素做默认的升序排序

void sort (RandomAccessIterator first, RandomAccessIterator last);

eg: int a[n]

sort(a,a+n)

vector st(size);

sort(st.begin(),st.end());

//按照指定的 comp 排序规则(可自己定义该comp函数,并作为参数),对 [first, last) 区域内的元素进行排序

void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);

题目:

安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码从大到小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位

代码:

using namespace std;
int cmp(string a, string b) //单独定义出排序规则,用于填sort函数的第三个参数
{
    string x=a.substr(6, 8);
    string y=b.substr(6, 8);
    if(x!=y)
        return x>y;
    else
        return a>b;
    return 0;
}

int main() 
{
    int n;
    cin>>n;
    vector<string> str(n) //元素个数为n,类型为string
    for(int i=0;i<n;i++)
        cin>>str[i];
    sort(str.begin(),str.end(),cmp); //利用迭代器作为参数
    for(int i=0;i<n;i++)
        cout<<str[i]<<endl;
    return 0;
}