请高手指教-关于list的sort()问题

thinkerhj 2003-01-02 10:18:15
#include <iostream>
#include <list>
#include <string>
using namespace std;

int main(int argc, char* argv[])
{

list<char*> li;
li.push_front("20021212");
li.push_front("20020812");
li.push_front("20020912");
li.push_front("20021213");

li.sort();

list<char*>::iterator p = li.begin();

while(p != li.end())
{
cout<<((char*)*p)<<endl;
p++;
}
getchar();
return 0;
}
请帮我看看为什么不能排序?
...全文
161 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2003-01-18
  • 打赏
  • 举报
回复
这样吧,push_front(string("20021212"));
fangrk 2003-01-17
  • 打赏
  • 举报
回复
我来拿点分数吧!

std::sort(iterator1,iterator2,compare)中间,iterator1和iterator2需要是random iterator(随机指针),仅仅是biradical iterator(双向指针)是不够的。
像string,vector等都支持随机指针,而list是双向指针(例如不能有first+=n),所以对list的排序需要这样调用:list.sort(...),而不能这样写:sort(list.begin(),list.end(),...)。

缺省的比较参数是<,在你的例子中间采用了const char*,需要定义

class compareString
{
bool operator(const char* rhs ,const char* lhs)
{
return strcmp(rhs,lhs) == 0;
}
}

//sort(li.begin() ,li.end() ,compareString());错误
li.sort(compareString());

如果采用std::string作为list的内容(std::list<std::string> li;),那么li.sort()就可以了。
thinkerhj 2003-01-14
  • 打赏
  • 举报
回复
同意 topikachu(皮皮)
这样写,比较的是char *的顺序(也就是两个指针的地址先后顺序)
to: vlmf(小兵)
能不能给出你的代码、我这里调试不能通过。

aliucc 2003-01-05
  • 打赏
  • 举报
回复
#include <iostream>
#include <list>
#include <string>
#include <algorithm>
using namespace std;

int main()
{

list<string> li;
li.push_front("20021212");
li.push_front("20020812");
li.push_front("20020912");
li.push_front("20021213");

li.sort();

list<string>::iterator p = li.begin();

while(p != li.end())
{
cout<<*p<<endl;
p++;
}
return 0;
}



以上程序在VC++6.0下调试通过。
topikachu 2003-01-03
  • 打赏
  • 举报
回复
re: vlmf(小兵)
既然是要排续,就要有大小(先后)顺序
所以oprator()返回的应该类似 < 比较的情况
vlmf 2003-01-02
  • 打赏
  • 举报
回复
bool operator()(const char* rhs ,const char* lhs)
vlmf 2003-01-02
  • 打赏
  • 举报
回复

class compareString
{
bool operator(const char* rhs ,const char* lhs)
{
return strcmp(rhs,lhs) == 0;
}
}

sort(li.begin() ,li.end() ,compareString());
xiaonian_3654 2003-01-02
  • 打赏
  • 举报
回复
#include <iostream>
#include <list>
#include <string>
#include <stdio.h>
using namespace std;

int main(int argc, char* argv[])
{

list<string> li;
li.push_front("20021212");
li.push_front("20020812");
li.push_front("20020912");
li.push_front("20021213");

li.sort();

list<string>::iterator p = li.begin();

while(p != li.end())
{
cout<<*p<<endl;
p++;
}
getchar();
return 0;
}
topikachu 2003-01-02
  • 打赏
  • 举报
回复
尽量用些高级的东西吧,比如string类型,而不是char*.
只要改成list<string> li;那么你就自动有按照字符顺序的功能了:)
topikachu 2003-01-02
  • 打赏
  • 举报
回复
你要按照什么排续?
数字顺序?
字符的比较顺序?
你这样写,比较的是char *的顺序(也就是两个指针的地址先后顺序)
JDK 1.5的泛型實現(Generics in JDK 1.5) 1 侯捷觀點 JDK 1.5的泛型實現 — Generics in JDK 1.5 — 北京《程序員》 2004/09 台北《Run!PC》2004/09 作者簡介:侯捷,資訊教育、專欄執筆、大學教師。常著文章自娛,頗示己志。 侯捷網站:http://www.jjhou.com(繁體) 北京鏡站:http://jjhou.csdn.net(簡體) 永久郵箱:jjhou@jjhou.com . 讀者基礎:有 Java語言基礎,使用過 Java Collections。 . 本文適用工具: JDK1.5 . 本文程式源碼可至侯捷網站下載 http://www.jjhou.com/javatwo-2004-reflection-and-generics-in-jdk15-sample.ZIP . 本文是 JavaTwo-2004技術研討會同名講題之部分內容書面整理。 . 關鍵術語: persistence(永續性、持久性) serialization(序列化、次第讀寫) generics(泛型) polymorphism(多型) 全文提要 泛型技術與 Sun JDK的淵源可追溯自 JDK1.3。但無論 JDK 1.3或 JDK1.4,都只是 以編譯器外掛附件的方式來支援泛型語法,並且 Java標準程式庫未曾針對泛型全 侯捷觀點 Generics in JDK 1.5 面改寫。而今 JDK1.5正式納入泛型。本文討論 JDK1.5的泛型實現,包括如何使 用及自訂 generic classes and algorithms,其中若干語法異於 JDK 1.3和 1.4。 我 我我我我曾經在 JavaTwo 2002大會上針對泛型技術給出一個講題,並將內容整理為《Java 泛型技術之發展》一文(http://www.jjhou.com/javatwo-2002.htm)。該文所談的 Java 泛型語法以及 Java泛型技術之內部實作技術,在今天(被 JDK 1.5正式納入)依 然適用。但由於有了若干小變化,並且由於 Java標準程式庫的全面改寫,使我認 為有必要再整理這篇文章,讓讀者輕鬆地在 JDK 1.5中繼續悠遊「泛型」技術。 閱讀本文之前,如果自覺基礎不夠,可以補充閱讀適才提到的《Java泛型技術之 發展》,那是一篇非常完整的文章,可助您完整認識泛型技術的來龍去脈。 Sun JDK的泛型發展歷史要從 1.3版說起。該版本配合 GJ,正式進入泛型殿堂。 所謂 GJ是 "Generic Java" 的縮寫,是一個支援泛型的 Java編譯器補充件,可謂 Java 泛型技術的先趨。隨後,泛型議題正式成為 JSR #14,其技術基礎便是源自 GJ。 JDK1.4搭配 JSR14提供的外掛附件,使泛型技術在 Java世界從妾身未明的身份扶 正而為眾所屬目的焦點。今天,JDK1.5終於內建泛型特性,不僅編譯器不再需要 任何外力(外掛附件)的幫助,整個 Java標準程式庫也被翻新(retrofit),許多 角落針對泛型做了改寫。 讓我們把帶有「參數化型別」(parameterized types)的 classes稱為 generic classes, 把帶有「參數化型別」的 methods稱為 generic algorithms,那麼,對眾多 Java程 式員而言,泛型帶來的影響不外乎以下四點,稍後逐一說明。 ..如何使用 generic classes ..如何使用 generic algorithms ..如何自訂 generic classes ..如何自訂 generic algorithms 在此先提醒您,運用泛型時,加上 –Xlint:unchecked編譯選項,可讓編譯器幫 助我們檢查潛在的型別轉換問題。 侯捷觀點 JDK 1.5的泛型實現(Generics in JDK 1.5)3 使用 Generic Classes Generic classes的最大宗運用是 collections(群集),也就是實作各種資料結構(例 如 list, map, set, hashtable)的那些 classes。也有人稱它們為容器( containers)。這 些容器被設計用來存放 Object-derived元素。而由於 Java擁有單根繼承體系,任 何 Java classes都繼承自 java.lang.Object,因此任何 Java ob

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧