按字典顺序排序字符串c ++
Posted
技术标签:
【中文标题】按字典顺序排序字符串c ++【英文标题】:sort strings in dictionary order c++ 【发布时间】:2014-08-19 04:00:10 【问题描述】:我有一个字符串列表,其中包含以下单词:Amount、bird、ant、Bob、David、case... 我需要按字典顺序对它们进行排序(数量、蚂蚁、鸟、鲍勃、案例、大卫......)
我使用插入排序,结果输出是前面全是大写字母,然后是小写字符串(Amount、Bob、David、ant、bird、case...)。
我的问题是将这些单词按字典顺序排序的更好方法是什么?我是否必须将每个单词更改为小写然后进行比较?或者我们有更好的方法来比较它?
【问题讨论】:
强相关:***.com/questions/11635/… @user3923936 什么是“字符串列表”?它们是字符数组还是其他? ***.com/a/17330790/434551 提供了不区分大小写的字符串比较功能。 根据上面的 cmets,给定一个不区分大小写的比较函数,对std::list
进行排序涉及使用 Compare
调用不敏感比较的函数调用 sort
member function(检查第一个 arg 小于第二个)。如果您的意思不是字面意义上的list
,那么将std::sort
与迭代器和类似的比较函子一起使用。
【参考方案1】:
将std::sort
(或std::stable_sort
,如果您想保留元素的顺序)与比较函数一起使用:
std::sort(list.begin(), list.end(), caseInsensitiveComparison);
std::stable_sort(list.begin(), list.end(), caseInsensitiveComparison);
其中caseInsensitiveComparison
是不区分大小写的比较函数,一个二进制函数返回第一个参数字符串是否应该在字典中的第二个之前。正如之前的 cmets 所指出的,请查看 this question 了解如何实现不区分大小写的比较。
【讨论】:
我不确定std::sort,但对于std::stable_sort,比较是在参数反转的情况下完成的,“稍后”元素(要比较的第一个参数)与“earlier”元素(要比较的第二个参数),如果“later”元素“小于”“ealier”元素,则预期结果是比较返回true,在这种情况下,元素是无序的。对于std::sort,它没有太大区别,但是对于std::stable_sort,如果元素相等,它会保留原始顺序。以上是关于按字典顺序排序字符串c ++的主要内容,如果未能解决你的问题,请参考以下文章