マルチスレッドでマップにアクセスする場合の使い方

必要なインクルードファイル

#include <afxtempl.h>
#include <Afxmt.h>

クリティカルセクションのオブジェクト
CCriticalSection cs;

マップのオブジェクト
CMap< CString, LPCSTR, CString, CString&> myMap1;

要素を追加する例
 

int num=0;
void CMaptestDlg::OnButton1()
{
 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
 char strnum[100];
 
 itoa(num,strnum,10);
 CString a = "これは自分のストリング";
 a += strnum;
 cs.Lock();
 myMap1.SetAt(a, a+"追加したストリング");
 cs.Unlock();
 num ++;
}
 

要素にアクセスする例
 

void CMaptestDlg::OnButton2()
{
 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
 
 CString p = ""; // 発見した場合に要素を入れるポインタ
 CString s = "これは自分のストリング1";   // 探したい要素のKEY
 BOOL w = myMap1.Lookup(s, p);
}
 

キーにストリングを使って要素に構造体を使用する例
 

//----- マップテンプレート テスト ------------------------------
// キーとして氏名を使い、要素は名前、住所、アイテム、年齢の
// 入った構造体とする。
struct myData // マップ要素用構造体
{
 CString Name;
 CString Address;
 CString Item;
 int Age;
};
 
CCriticalSection cs; // マルチスレッド用
CMap< CString, LPCSTR, myData, myData&> myMap1; //マップのテンプレート
int num=0; // サンプルデータ用
 
//----- ボタン1を押すと要素を追加
void CMaptestDlg::OnButton1()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
char strnum[100];
 
myData md0; // マップにセットする要素のオブジェクト
 
itoa(num,strnum,10);
md0.Name = "杉本れいみ"; // 構造体の要素1
md0.Address = "杜旺町"; // 構造体の要素2
md0.Item = "アルフレッド"; // 構造体の要素3
md0.Age = num; // 構造体の要素4
num++;
 
cs.Lock(); // マルチスレッド用
myMap1.SetAt(md0.Name, md0); // マップに要素をセットする
cs.Unlock(); // マルチスレッド用
}
//----- ボタン2を押すと要素を読み出す(存在するとTRUEを返す)
void CMaptestDlg::OnButton2()
{
 // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
 
 CString s = "杉本れいみ"; // 検索用キー
 myData md1; // データ受け取り用構造体
 BOOL w = myMap1.Lookup(s, md1); // マップからキーを検索する
 int a = sizeof(myMap1); // マップのサイズ
}