於是找到地圖的項目,我有兩個文本框(早期定義)和兩個向量:由TCHAR鍵名
std::vector<TCHAR*> v1;
std::vector<int> v2;
與地圖:
std::map <TCHAR*, int> m1;
std::map <TCHAR*, int>:: iterator i1;
地圖初始化:
void mapInit()
{
m1[L"one"] = 1;
m1[L"two"] = 2;
m1[L"three"] = 3;
m1[L"four"] = 4;
m1[L"five"] = 5;
m1[L"six"] = 6;
m1[L"seven"] = 7;
m1[L"eight"] = 8;
m1[L"nine"] = 9;
m1[L"ten"] = 10;
}
我應該從第一個文本框中獲得單詞「one」,並將其寫入矢量'v1'(文本框將來必須有更多的單詞,所以我不能在沒有矢量的情況下做到這一點) )。 後,該程序具有通過鍵名在地圖所需的值來查找:
TCHAR *zr = v1.at(0); // v1.at(0) has the word `one` atm
i1 = m1.find(zr); // want to get value `1` by key `one`
int z = i1->second; // and get it completely
我得到了一個調試斷言錯誤「圖/套迭代器不dereferencable」 .. :(
我是否會?做都一樣,但將其更改爲L「一」:
TCHAR *zr = L"one"; //
i1 = m1.find(zr);
int z = i1->second;
所以它的作品... 爲什麼它不與矢量值工作,我用我的調試器的矢量值檢查 - 它'L'one''too!但是不管用......
注:我也試圖找到沒有.find字()方法:
TCHAR *zr = v1.at(0);
int z = m1[zr]; // - now `z` returns a null...
如果我會改變 'v1.at(0)' 到L 「一」,它會重新工作
Heeeeeelp :(爲什麼它不工作?
============================================== ===
Yeeeeeeeah現在它的工作! :) 簡單的解決辦法:
wstring zr = v1.at(0);
int z = m1[zr];
雙笑臉) 感謝大家的幫助BRO-S :)
使用'std :: wstring'而不是'TCHAR *' – 2013-04-06 17:36:27
可能重複[std :: map不按預期行事](http://stackoverflow.com/questions/10937605/stdmap-not-behaving-as -expected) – 2013-04-06 17:43:18
謝謝你的回答。方法GetWindowText()允許我從文本框中獲取文本,返回TCHAR值類型...如果我將使用wstring,編譯器會說「std:wstring與LPWSTR不兼容」。我編程的win32應用程序。沒有其他解決方案? ( – FireForce 2013-04-06 17:45:55