STL map <string ^,string ^ =“”> hashmap;为什么这不起作用?</string ^,>

时间:2013-11-30 04:07:21

标签: c++ map stl c++-cli

我正在尝试编写一个简单的登录表单。我想在STL地图中存储登录帐户列表。

从表单上的文本框中检索文本值时。这些框返回“String ^”

所以我拥有的是:

map <String^, String^> NamePassList;
typedef pair<String^, String^> StringPair; 

string line, usrName, password;
usrName = password = "";
ifstream ifs("login.in");
if (ifs.is_open()){
    while (!ifs.eof()){
        getline(ifs,line);
        bool endofusername = false;
        for (int i = 0; i < line.length(); i++){
            if (line[i] == ' '){
                endofusername = true;
            }
            if (!endofusername){
                usrName += line[i];
            }
            else{
                password += line[i];
            }
        }
        String ^ temp1 = gcnew String(usrName.c_str());
        String ^ temp2 = gcnew String(password.c_str());
        NamePassList.insert(StringPair(temp1, temp2));
    }
    ifs.close();
}

String ^ UserName = txtUserName->Text;
String ^ Password = txtPassword->Text;

map<String^, String^>::iterator nameItor;
nameItor = NamePassList.find(UserName);

if (nameItor->first == UserName){
    if (nameItor->second == Password){
        MessageBox::Show("Sucsess!", "log", MessageBoxButtons::OK);
    }
    else
        MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}
else
{
    MessageBox::Show("Fail!", "log", MessageBoxButtons::OK);
}

编译时我从“地图类”和实用程序获得的错误。

这种接缝就像最好的方法一样,但我尝试的一切都给了我一个新的错误。

任何帮助都会很棒!!谢谢大家。

1 个答案:

答案 0 :(得分:0)

为了减少一些错误,请尝试使用std :: string来简化代码。

如果选择不使用托管String类型,我会选择std :: string。由于您已经使用了std :: string,请尝试使用NamePassList的类型。另外,键入dede map。然后对于插入,使用value_type。

typedef map<string, string> StringMap;
StringMap NamePassList;

插入:

StringMap::value_type vt(usrName, password);
StringMap::_Pairib pair = NamePassList->insert(vt);
if (pair.second == false)
{
   ... problems... key already exists ....
}

还有搜索:

StringMap::iterator iter = NamePassList.find(UserName);
if (iter != NamePassList.end())
{
   ...found...
}

你不想“使用”iter,直到你知道它对end()进行测试是有效的。