set容器放入结构体指针,怎么按指定的字段排序?
#include "set"
using namespace std;
// 类层次表树(采用指针,防止大数据量时Copy数据慢)
#define DWBMTree set<DWBM_NODE*>
struct DWBM_NODE
{
charszCode[8];
charszName[32];
DWBMTreeoSubTree;
DWBM_NODE()
{
memset(szCode, 0, 8);
memset(szName, 0, 32);
}
// 排序
bool operator < (const DWBM_NODE **pNode) const
{
return (stricmp((*pNode)->szCode, szCode) > 0);
}
};
void TestSort()
{
DWBMTreeTree;
DWBM_NODE*pNode1, *pNode2, *pNode3, *pNode4;
pNode1 = new DWBM_NODE;
pNode2 = new DWBM_NODE;
pNode3 = new DWBM_NODE;
pNode4 = new DWBM_NODE;
strcpy(pNode1->szCode, "2100100");
strcpy(pNode1->szName, "Node1");
Tree.insert(pNode1);
strcpy(pNode2->szCode, "2150100");
strcpy(pNode2->szName, "Node2");
Tree.insert(pNode2);
strcpy(pNode3->szCode, "2130100");
strcpy(pNode3->szName, "Node3");
Tree.insert(pNode3);
strcpy(pNode4->szCode, "2120100");
strcpy(pNode4->szName, "Node4");
Tree.insert(pNode4);
}
无论怎么修改都无法按szCode排序?各们大侠怎么解决呀?
[解决办法]
用仿函数
#include "set"
using namespace std;
// 类层次表树(采用指针,防止大数据量时Copy数据慢)
#define DWBMTree set<DWBM_NODE*, DWBM_NODE::Compare>
struct DWBM_NODE
{
struct Compare
{
bool operator ()(const DWBM_NODE *lhs, const DWBM_NODE *rhs) const
{
return (stricmp(lhs->szCode, rhs->szCode) > 0);
}
};
char szCode[8];
char szName[32];
DWBMTree oSubTree;
DWBM_NODE()
{
memset(szCode, 0, 8);
memset(szName, 0, 32);
}
};
void TestSort()
{
DWBMTree Tree;
DWBM_NODE *pNode1, *pNode2, *pNode3, *pNode4;
pNode1 = new DWBM_NODE;
pNode2 = new DWBM_NODE;
pNode3 = new DWBM_NODE;
pNode4 = new DWBM_NODE;
strcpy(pNode1->szCode, "2100100");
strcpy(pNode1->szName, "Node1");
Tree.insert(pNode1);
strcpy(pNode2->szCode, "2150100");
strcpy(pNode2->szName, "Node2");
Tree.insert(pNode2);
strcpy(pNode3->szCode, "2130100");
strcpy(pNode3->szName, "Node3");
Tree.insert(pNode3);
strcpy(pNode4->szCode, "2120100");
strcpy(pNode4->szName, "Node4");
Tree.insert(pNode4);
}
[解决办法]
2楼正解,难道lz不知道set除了元素的类型,还支持传入一个对元素进行排序的Functor吗?
template<class _Kty,
class _Pr = less<_Kty>,
class _Alloc = allocator<_Kty> >
class set
{
}
因为只有第一个类型参数是必须传入的,第二个排序类型有默认的,但是你也可以手动传入的嘛!