在MFC中询问CList Find功能

时间:2013-04-17 03:38:16

标签: mfc clist

我按照以下方式创建结构

struct DoubleListDataNode
{
INT         nSequenceID;
DOUBLE          fTemp;
DOUBLE          fHumi;
INT         nTimeHour;
INT         nTimeMiin;
INT         nTS1;
INT         nTS2;
};

我创建了一个clist

typedef CList<DoubleListDataNode *, DoubleListDataNode *> listDoubleListDataNode;

我创建公共变量

listDoubleListDataNode  gDoubleListDataNode;
DoubleListDataNode      *pDoubleListDataNode;

现在,我有列表中的数据

1 1.00 2.00 001H01M 1 2
2 1.00 2.00 002H01M 1 2
3 3.00 4.00 003H02M 3 4
4 3.00 4.00 004H02M 3 4
5 5.00 6.00 005H03M 5 6
6 5.00 6.00 006H03M 5 5

如何在CList中使用查找功能,找到nSequenceID = 1或5?

没有findindex(0)和findindex(5)

我尝试gDoubleListDataNode(1,...),但它不起作用

感谢

1 个答案:

答案 0 :(得分:0)

CList类的Find()方法的实现是使用==运算符比较元素。在您的情况下,元素是指向结构的指针。 Find()只是试图将元素的地址与您传递给它的参数进行匹配。

这意味着使用当前设计,即使您为结构定义了相等operator==,也无法在不将每个元素的地址存储在单独集合中的某个位置的gDoubleListDataNode中的情况下找到元素。

您有两种选择。

  1. 您可以将列表定义为typedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;。当你这样做时,你将不得不用元素填充它,而不是指针。但是,对于struct DoubleListDataNode,您必须定义operator=operator==。定义后者时,您可以实现它将使用nSequenceID

  2. 您可以使用CMap,而不是使用CList。将其定义为typedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode;这样您就可以使用MFC哈希表的强大功能快速定位地图中所需的元素。但需要注意的是:地图中的值将是唯一的