マルチスレッドでマップにアクセスする場合の使い方
必要なインクルードファイル
#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); // マップのサイズ
}