list容器排序问题?

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

using namespace std;

int main(){
  int array[] = { 1,2,3,4,2,5,6,3,7,5,8,9};
  list<int> ilst(array,array + sizeof(array) / sizeof(int));
  vector<int> ivec;
  sort(ilst.begin(),ilst.end());
  ilst.erase(unique( ilst.begin(),ilst.end()),ilst.end());
  for(list<int>::iterator it = ilst.begin(); it != ilst.end(); ++it){
  cout << *it << " " << flush;
  }
  cout << endl;
  system("pause");
  return 0;
}


为什么我调用sort时编译通不过,而把list换成vector容器就能编译通过?这是什么原因????




list有自己的排序算法。

ilst.sort试试

list容器的sort成员函数是针对 list容器的元素排序的(与STL中的sort算法函数不同,sort算法只对随机迭代器有效,不能用于链表容器的元素排序)。


STL源码剖析——list容器排序算法sort() 由于STL本身的排序算法sort接受的输入迭代器是随机访问迭代器,但是双向list链表容器的访问方式是双向迭代器,因此,不能使用STL本身的排序算法sort,必须自己定义属于自己访问的排序算法。我们从源码的剖析中,可以看到该排序算法思想类似于归并排序 阅读详情

相关推荐

C++——STL容器list链表的讲解

简单介绍了C++容器——list的一些内容

weixin_69283129的博客 2193

<C++> list容器本质|常用接口|自定义排序规则

今天把 list容器的基本操作、常用接口做一个系统的整理,结合具体案例熟悉自定义内部排序方法的使用。list与vector 是STL中最常用的两个容器,如果对vector 容器不熟悉的朋友可以在系列专栏里翻阅复习或者学习。

叶落秋白的博客 2413

list容器排序案例

案例描述: 将per类型进行排序,per属性中有姓名,年龄,身高,体重 排序规则:按照年龄进行升序排列,如果年龄相同按照身高进行降序排列,如果身高相同按照体重进行升序排列 源码如下: #include<iostream> using namespace std; #include<list> #include<string> class per { public: per(string name, int age, int height,int weight);

m0_53157173的博客 780

list(链表)容器的规则及list的高级排序案例

list的重要性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector中是不成立的(vector插入元素大于开始容量时,会进行深拷贝,原有迭代器会失效)list(链表)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。链表是由一系列节点组成,节点的组成包含存储数据元素的数据域和存储下一个节点地址的指针域。STL中的链表是一个双向循环链表。

weixin_74207910的博客 1209

list容器中,完成列表的升序降序

使用C++的list容器,可以通过调用sort()函数来实现列表的升序排序和降序排序。sort()函数默认使用升序排序,若要实现降序排序,可以使用greater()函数作为参数。但如果类型为复杂的自定义类,则还需要自己进行 == 重载和回调函数等操作。使用list容器。放入5个人,属性有姓名、身高、体重。1、按体重的降序排列2、体重如果相同,按身高的降序排学生类里面有姓名、年龄、身高等属性。先声明好5个对象,后分别把三个对象放入list 容器

孤ROS的博客 1428

C++ —— STL中list容器中sort()排序规则

在使用STL写代码时运用到了list容器中的sort()排序,但现在需要的是给容器数据的部分属性进行有前提的排序,这时候就不能直接使用sort()排序来操作;原因是sort()需要的时随机访问的迭代器,而list链表时双向链表,不允许有随机访问的操作。 例如:按照年龄升序 如果年龄相同按照身高降序 class Person { public: Person(string name,int age,int height) { m_Name = name; m_Age = age; m_He

3598

C++-第13课List 容器详解:适合每个程序员的必备知识

/ 访问第一个元素// 访问最后一个元素return 0;// 降序比较// 使用自定义比较函数进行降序排序// 输出: 9 6 5 5 2 1return 0;// 自定义规则:移除相邻的偶数/奇数// 使用自定义规则去重// 输出: 1 2 5return 0;

2401_83603768的博客 2668

【C++篇】从基础到进阶:全面掌握C++ List容器的使用

中,我们系统地学习了。

braveact的博客 1363

【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器

C++ 标准模板库(STL)中的 list 容器是双向链表结构,适用于频繁的插入与删除操作,但不支持随机访问。相比 vector,list 的插入和删除效率极高,尤其适合在需要频繁修改链表结构的场景下使用。本文通过详细的代码示例,从 list 的构造、插入、删除、排序、迭代器操作,到内存管理,全面深入地解析 list 容器,帮助读者快速掌握其特性与用法。无论你是 C++ 初学者还是进阶者,都可以通过本文轻松掌握 list 的高效操作。

半截诗的博客~ 2148

[C#] List的条件排序

<br />在VC++和VC#里容器排序始终是比较烦燥的事,C#的List的简单排序<br /> List<T>.Sort(delegate(T t1, T t2) { return t1.Name.CompareTo(t2.Name);} );<br />多条件下比较痛苦,如 排序条件为 按分销点及订单日期及额度的话,要很小心排序执行的先后顺序。 -_-凸 

scate的专栏 1781

【C++】list 容器操作

文章摘要:本文介绍了C++中list容器的特性与应用。list作为vector的补充,解决了vector在头部/中部插入删除效率低(O(N))和扩容代价大的问题,具有O(1)时间复杂度的插入删除优势,但牺牲了随机访问能力。文章详细讲解了list的四种迭代器(正向/反向/const/双向)、常用操作(头尾插删、任意位置操作)、排序方法(不推荐使用),以及迭代器失效问题和解决方案。最后通过对比vector和list的迭代器实现原理,解释了list采用节点指针封装实现迭代器自增操作的机制。

C语言、数据结构、单片机、嵌入式实时操作系统、C++ 学习路径记录 1614

list容器的使用

merge会把里面的list对象l2的内容剪切到lt中并排序好(其实里面的过程是先将两个list类型的对象分别排序好 然后按照类似于归并排序那里的方式每次从两个中找小的放到一个新的对象中 结束之后再把内容拷到lt中) merge之后 l2对象会清空。如algorithm算法库中的sort 其支持随机迭代器 可以把string和vector类型的对象进行排序 但是双向迭代器类型的list就不能使用 其实就是sort的实现用到的是快排的方式 而快排中的三数取中等逻辑只支持物理空间上连续的结构。

moringlightyn的博客 1104

STL list 排序

转载自:http://apps.hi.baidu.com/share/detail/30068696 1.algorithm 里的sort()只接收RandomAccessIterator 用于像vector,dequeue的排序 2.像set,map,这种关联式容器,本身就由RBTree维护了有序,只要遍历一遍就行了。 3.而list比较特殊一点,由于只有Bidirect...

weixin_30646505的博客 82

list的特殊排序方法[原创]

本例演示了对list的特殊排序方法。编程需求:在原有代码基础进行更新,需要对list进行排序list保存的是指针,而排序的依据为指针指向对象的某一个属性。分析:list本身包含有sort方法,但是并不能满足要求,其排序方法是使用其元素的比较方法(如果list内部保存为对象,即可使用这个方法,但是,由于保存内容为指针,其按照指针大小进行比较,这并不是我们想要的结果。同时,可以考虑利用标准sort方

wenwenwen的专栏 1788

C++ list容器用法

C++ list容器用法,记录一下方便查阅

Electro1ux的博客 461

【C++】list基本接口+手撕 list(详解迭代器)

本篇难点在于手撕list,以及迭代器的理解,希望可以给大家带来帮助!

小羊study_sheep的博客 3928

【C++学习笔记(三十四)】之list链表容器

本文章由公号【开发小鸽】发布!欢迎关注!!! 老规矩–妹妹镇楼: 一、list 链表容器         链表是一种物理存储单元上不连续的存储结构,它是通过指针链接起来的。一个结点包括两个部分,一部分是存储数据的,一部分是存储下一个结点地址的指针。         list链表容器扩充空间是需要多少给多少,插入一个就多链接一个结点,删除一个就释放一个结点。       &nb

开发小鸽 356

8、【C++】STL容器list的用法及模拟实现

list是C++标准库提供的双向链表容器,定义在<list>头文件中。它由节点组成,每个节点包含数据域和两个指针域(前驱指针prev和后继指针next),通过指针将节点连接成链表。核心特性双向遍历:支持向前和向后遍历(通过++和--操作符)。动态节点:元素存储在独立节点中,节点间通过指针连接,非连续存储。高效插入删除:在任意位置插入/删除元素只需修改指针,时间复杂度O(1)(已知位置时)。无随机访问:访问第n个元素需从头遍历,时间复杂度O(n)。不浪费空间。

gamblerofdestinyR14的博客 973
上一篇: c++错误集合
下一篇: windows API 串口编程参考
nocodelife
博客等级 码龄14年 43粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值