于是找到地图的项目,我有两个文本框(早期定义)和两个向量:由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