加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何使用区分大小写的元素对std :: list进行排序?

发布时间:2020-12-16 10:27:17 所属栏目:百科 来源:网络整理
导读:这是我目前的代码: #include list#include stringusing std::string;using std::list;int main(){ list string list_; list_.push_back("C"); list_.push_back("a"); list_.push_back("b"); list_.sort();} sort()函数是否根据字符代码对元素进行排序?我希
这是我目前的代码:

#include <list>
#include <string>
using std::string;
using std::list;

int main()
{
    list <string> list_;
    list_.push_back("C");
    list_.push_back("a");
    list_.push_back("b");

    list_.sort();
}

sort()函数是否根据字符代码对元素进行排序?我希望在排序完成后,这里的结果是b C.

解决方法

默认比较器(<)使用默认的char_traits< char>将您的列表排序为C a b.

见list::sort.

为了达到所需的顺序a b C,你可以:

>使用custom char_traits编写您的字符串类型列表,或
>提供自定义字符串比较器的实例以进行排序,例如

bool istring_less(const string& lhs,const string& rhs) {
  string::const_iterator 
    lb = lhs.begin(),le = lhs.end(),rb = rhs.begin(),re = rhs.end();
  const char lc,rc;
  for ( ; lb != le && rb != re; ++lb,++rb) {
    lc = tolower(*lb);
    rc = tolower(*rb);
    if (*lc < *rc) return true;
    if (*lc > *rc) return false;
  }
  // if rhs is longer than lhs then lhs<rhs
  return (rb != re);
}
...
list.sort(istring_less);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读