Спросите функцию поиска 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== для вашей структуры.

У вас есть два варианта.

  1. Вы можете определить свой список как typedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;, Когда вы сделаете это, вам нужно будет заполнить его элементами, а не указателями. Для тебя struct DoubleListDataNodeОднако вам придется определить operator= а также operator==, Когда вы определяете последнее, вы можете реализовать его, что он будет использовать nSequenceID

  2. Вместо использования CList вы можете использовать CMap. Определите это как typedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode; Таким образом, вы сможете использовать мощные хэш-таблицы MFC для быстрого поиска нужного элемента на карте. Одно замечание: значения на карте будут уникальными

Другие вопросы по тегам