2016-11-14 62 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'。如果你使用非標準功能,你應該告訴我們你的目標是哪個操作系統/編譯器/標準庫。 'void main'也不是標準的。 – user2079303

回答

2

你不能那樣做,因爲默認map比較器會比較TCHAR指針,這當然會有所不同。最好的方法是使用std::wstring代替。如果你堅持使用TCHAR指針,你必須提供custom comparator

+0

如果'TCHAR'不是'wchar_t'會怎麼樣? – user2079303

+0

然後使用'std :: string',或者定義一個宏,以防需要支持* both *種字符串。 – Ari0nhh

+0

你不需要一個宏。只需使用'std :: basic_string '來支持任何'TCHAR'。 – user2079303