Спросите функцию поиска CList в 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
Как использовать функцию поиска в CList, чтобы найти nSequenceID = 1 или 5?
без findindex(0) и findindex(5)
Я пытаюсь gDoubleListDataNode(1, ...), но это не работает
Спасибо
1 ответ
Реализация метода Find() класса CList заключается в том, что он сравнивает элементы с помощью оператора ==. В вашем случае элемент является указателем на структуру. Find() будет просто пытаться сопоставить адрес элемента с параметром, который вы передаете ему.
Что это означает, что с текущим дизайном вы не сможете найти элемент, не сохраняя адреса каждого элемента в gDoubleListDataNode где-то в отдельной коллекции, даже если вы определите равенство operator==
для вашей структуры.
У вас есть два варианта.
Вы можете определить свой список как
typedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;
, Когда вы сделаете это, вам нужно будет заполнить его элементами, а не указателями. Для тебяstruct DoubleListDataNode
Однако вам придется определитьoperator=
а такжеoperator==
, Когда вы определяете последнее, вы можете реализовать его, что он будет использовать nSequenceIDВместо использования CList вы можете использовать CMap. Определите это как
typedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode;
Таким образом, вы сможете использовать мощные хэш-таблицы MFC для быстрого поиска нужного элемента на карте. Одно замечание: значения на карте будут уникальными