我按照以下方式创建结构
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,...),但它不起作用
感谢
答案 0 :(得分:0)
CList类的Find()方法的实现是使用==运算符比较元素。在您的情况下,元素是指向结构的指针。 Find()只是试图将元素的地址与您传递给它的参数进行匹配。
这意味着使用当前设计,即使您为结构定义了相等operator==
,也无法在不将每个元素的地址存储在单独集合中的某个位置的gDoubleListDataNode中的情况下找到元素。
您有两种选择。
您可以将列表定义为typedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;
。当你这样做时,你将不得不用元素填充它,而不是指针。但是,对于struct DoubleListDataNode
,您必须定义operator=
和operator==
。定义后者时,您可以实现它将使用nSequenceID
您可以使用CMap,而不是使用CList。将其定义为typedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode;
这样您就可以使用MFC哈希表的强大功能快速定位地图中所需的元素。但需要注意的是:地图中的值将是唯一的