0

次のように構造体を作成します

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

nSequenceID = 1 または 5 を見つけるために、CList の検索機能を使用するにはどうすればよいですか?

findindex(0) および findindex(5) を使用しない場合

gDoubleListDataNode(1, ...) を試してみましたが、うまくいきません

ありがとう

4

1 に答える 1

0

CList クラスの Find() メソッドの実装は、== 演算子を使用して要素を比較することです。あなたの場合、要素は構造体へのポインタです。Find() は、要素のアドレスを、渡すパラメーターと一致させようとするだけです。

現在の設計では、構造体の等価性を定義したとしても、gDoubleListDataNode の各要素のアドレスを別のコレクションのどこかに保存しないと、要素を見つけることができないということですoperator==

2 つのオプションがあります。

  1. リストを として定義できますtypedef CList<DoubleListDataNode, DoubleListDataNode&> listDoubleListDataNode;。これを行うときは、ポインタではなく要素を設定する必要があります。ただし、についてstruct DoubleListDataNodeは、 と を定義する必要がありoperator=ますoperator==。後者を定義すると、nSequenceID を使用するように実装できます。

  2. CList を使用する代わりに、CMap を使用できます。このように定義するとtypedef CMap<int, int&, DoubleListDataNode *, DoubleListDataNode *> mapDoubleListDataNode;、MFC のハッシュ テーブルの機能を使用して、マップ内の必要な要素をすばやく見つけることができます。ただし、1 つ注意してください: マップ内の値は一意になります。

于 2013-04-17T04:24:24.937 に答える