STL list sort特殊处理

#include "stdafx.h"
#include "iostream"
#include <list>
//compiler: VC++2008

using namespace std;

typedef struct
{
int  i;
char arr[16];
}stdlist;

bool operator<(const stdlist& a, const stdlist& b)
{
    return a.i > b.i;
}


int _tmain(int argc, _TCHAR* argv[])

{

#if 1
list<stdlist> mylist;

stdlist tmp = {0};
tmp.i=100;
strcpy(tmp.arr, "one");
mylist.push_back(tmp);

stdlist tmp2 = {0};
tmp2.i=80;
strcpy(tmp2.arr, "two");
mylist.push_back(tmp2);

stdlist tmp3 = {0};
tmp3.i=222;
strcpy(tmp3.arr, "one");
mylist.push_back(tmp3);

stdlist tmp4 = {0};
tmp4.i=100;
strcpy(tmp4.arr, "one");
mylist.push_back(tmp4);

mylist.sort();

list<stdlist>::iterator iter=mylist.begin();
for(;iter!=mylist.end();iter++)
{
cout<<iter->i<<" ";

}


getchar();

        return 0;

}


output:222 100 100 80







#endif
### C++ STL `list` 容器中 `sort()` 成员函数的使用 在C++标准模板库(STL)中,`std::list` 提供了一个名为 `sort()` 的成员函数来对列表中的元素进行排序。此函数仅能用于已定义小于操作符 (`<`) 的元素类型。 #### 基本语法 对于不带参数调用的情况,默认按照升序排列: ```cpp void list<T>::sort(); ``` 如果希望自定义比较方式,则可以传递一个二元谓词作为参数: ```cpp template <class Compare> void list<T>::sort(Compare comp); ``` 这里 `comp` 应该接受两个同类型的对象并返回布尔值表示前者是否应排在后者之前。 #### 示例代码展示如何使用 `list::sort()` 下面的例子展示了创建一个整数列表,并对其进行简单排序以及通过提供定制化规则来进行降序排序的方法。 ```cpp #include <iostream> #include <list> using namespace std; // 自定义比较函数实现降序排序 bool desc_compare(int a, int b){ return a > b; } int main(){ // 初始化包含一些无序整数的列表 list<int> myList = {4, 2, 9, 6, 5}; cout << "Before sorting:" << endl; for(auto elem : myList) cout << elem << ' '; // 调用默认升序排序 myList.sort(); cout << "\nAfter ascending sort:" << endl; for(auto elem : myList) cout << elem << ' '; // 使用lambda表达式或预定义函数指针做降序排序 myList.sort(desc_compare); cout << "\nAfter descending sort with custom comparator:" << endl; for(auto elem : myList) cout << elem << ' '; return 0; } ``` 上述程序先打印原始未排序的数据序列,接着执行一次普通的升序排序再输出结果;最后利用用户指定的比较逻辑完成降序重排[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值