在MFC中请求列表查找功能



我创建了如下结构体

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

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

没有findinindex(0)和findinindex (5)

我尝试gDoubleListDataNode(1,…),但它不工作

谢谢

CList类的Find()方法的实现是使用==操作符对元素进行比较。在本例中,元素是指向结构体的指针。Find()将仅仅尝试将元素的地址与您传递给它的参数进行匹配。

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

你有两个选择。

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

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

相关内容

  • 没有找到相关文章

最新更新