64,648
社区成员
发帖
与我相关
我的任务
分享
//因为你的list里面装的是指针,当然就按指针的大小排序了,而不是指向的东西中的operator <排序
//我输出了一下指针本身的值
#include <list>
#include <cstdio>
#include <cstring>
using namespace std;
typedef struct subscribeitem
{
int cig_quantity;
char cig_name; //以此作为排序
public:
bool operator > (const subscribeitem& b1) const
{
return memcmp(&cig_name,&(b1.cig_name),1)>0;
}
bool operator < (const subscribeitem& b1) const
{
return memcmp(&cig_name,&(b1.cig_name),1) <0;
}
}Subitem;
int main()
{
//创建第一个list
list <Subitem*> ::iterator iter;
list <Subitem*> m_plist;
Subitem item1;
item1.cig_quantity=10;
item1.cig_name=0x19;
m_plist.push_back(&item1);
Subitem item2;
item2.cig_quantity=20;
item2.cig_name=0x18;
m_plist.push_back(&item2);
Subitem item3;
item3.cig_quantity=30;
item3.cig_name=0x20;
m_plist.push_back(&item3);
//打印结果
printf("打印结果:\n");
for(iter=m_plist.begin();iter!=m_plist.end();iter++)
{
printf("Quantity is %02d, Name is 0X%02x\n",(*iter)->cig_quantity,(*iter)->cig_name);
}
printf("\n");
m_plist.sort();
//打印排序后结果
printf("打印排序后结果:\n");
for(iter=m_plist.begin();iter!=m_plist.end();iter++)
{
printf("Quantity is %02d, Name is 0X%02x %p\n",(*iter)->cig_quantity,(*iter)->cig_name, *iter);
}
printf("\n");
return 0;
}
#include <list>
#include <cstdio>
#include <cstring>
using namespace std;
typedef struct subscribeitem
{
int cig_quantity;
char cig_name; //以此作为排序
public:
bool operator > (const subscribeitem& b1) const
{
return memcmp(&cig_name,&(b1.cig_name),1)>0;
}
bool operator < (const subscribeitem& b1) const
{
return memcmp(&cig_name,&(b1.cig_name),1) <0;
}
}Subitem;
int cmp(Subitem* l, Subitem* r)
{
return *l < *r;
}
int main()
{
//创建第一个list
list <Subitem*> ::iterator iter;
list <Subitem*> m_plist;
Subitem item1;
item1.cig_quantity=10;
item1.cig_name=0x19;
m_plist.push_back(&item1);
Subitem item2;
item2.cig_quantity=20;
item2.cig_name=0x18;
m_plist.push_back(&item2);
Subitem item3;
item3.cig_quantity=30;
item3.cig_name=0x20;
m_plist.push_back(&item3);
//打印结果
printf("打印结果:\n");
for(iter=m_plist.begin();iter!=m_plist.end();iter++)
{
printf("Quantity is %02d, Name is 0X%02x\n",(*iter)->cig_quantity,(*iter)->cig_name);
}
printf("\n");
m_plist.sort(cmp);
//打印排序后结果
printf("打印排序后结果:\n");
for(iter=m_plist.begin();iter!=m_plist.end();iter++)
{
printf("Quantity is %02d, Name is 0X%02x %p\n",(*iter)->cig_quantity,(*iter)->cig_name, *iter);
}
printf("\n");
return 0;
}