我创建了如下结构体
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==
。
你有两个选择。
-
您可以将列表定义为
typedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;
。当您这样做时,您将不得不用元素填充它,而不是指针。然而,对于struct DoubleListDataNode
,您必须定义operator=
和operator==
。当你定义后者时你可以使用nSequenceID 来实现它 可以使用CMap代替CList。将其定义为
typedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode;
,这样您就可以使用MFC的哈希表的功能来快速定位地图中所需的元素。注意:地图中的值将是唯一的