2016-11-14 12 views
0
#include<iostream> 
#include<map> 

using namesapce std; 
void main() 
{ 
    map<const TCHAR*, int> Map; 
    Map.insert(make_pare(L"DOG1",1)); 
    Map.insert(make_pare(L"DOG2",2)); 

    TCHAR szTem[128]; 
    wsprintf(szTem,L"DOG%d",1); 

    map<const TCHAR*, int>::iterator iter = Map.find(szTem); 

    cout << iter->second << endl; 
} 

このように、TCHAR []を使用してTCHAR * Keyvalueを見つけることができませんでした。 なぜ私はこれを行うことはできません、そして、整数型を含む文字列を使用して、ポインタ文字列Keyvalueを見つける方法はありますか?TCHAR []を使用してマップコンテナTCHAR *のKeyvalueを見つけることができませんか?

+1

比較演算子 '<'がTCHAR *に対してポインタを逆参照して文字列値を比較するために定義されていないため、正しくないポインタアドレス値を比較します。コンパイラを定義するか、 'std :: string'を使う必要があります。ここで' TCHAR'を使う必要がありますか? – EdChum

+0

あなたは 'TCHAR'を定義しませんでした。非標準機能を使用する場合は、どのos/compiler/standardライブラリをターゲットにしているか教えてください。 'void main'も標準ではありません。 – user2079303

答えて

2

デフォルト値mapコンパレータはTCHARポインタを比較しますが、これはもちろん違います。最良の方法は、代わりにstd::wstringを使用することです。 TCHARポインタを使用することを主張する場合は、custom comparatorを提供する必要があります。

+0

'TCHAR'が' wchar_t'でない場合はどうなりますか? – user2079303

+0

そして、 'std :: string'を使うか、*両方の種類の文字列をサポートする必要がある場合に備えて、マクロを定義してください。 – Ari0nhh

+0

マクロは必要ありません。単に 'std :: basic_string 'を使って 'TCHAR'をサポートしてください。 – user2079303

関連する問題