0

我创建结构如下

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

我创建了一个列表

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 中使用 Find 功能来查找 nSequenceID = 1 或 5 ?

没有 findindex(0) 和 findindex(5)

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

谢谢

4

1 回答 1

0

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

这意味着在当前设计中,如果不将 gDoubleListDataNode 中每个元素的地址存储在单独集合中的某个位置,您将无法定位该元素,即使您operator==为结构定义了相等性也是如此。

你有两个选择。

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

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

于 2013-04-17T04:24:24.937 回答