我正在编写解析器,我决定将类型信息保存在std :: map中。当我使用[]运算符访问它时,我总是得到枚举的0值。地图声明如下:
enum type {Bool, Bool_a, Int_4, Inta_4, Int_8, Inta_8, Float_s, Floata_s, Float_d, Floata_d, Ch_s, Ch_a, Str, Invalid};
class kparse_ret{
...
std::map<std::string, type
...
} ret_data;
然后使用
之类的东西设置ret_data.type_list[itemname] = Int_4;
(其中itemname是std :: string)
我遇到的问题是当我使用
ret_data.type_list[data_name]
我总是得到Bool,或者0.(同样,data_name是一个std :: string)。我知道当达到各自的上下文时,itemname和data_name具有完全相同的内容。此外,如果我再次使用itemname来访问它,我会得到我刚刚设置的值。
答案 0 :(得分:0)
比较字符串作为地图的关键字时,不仅要比较字符串的内容,还要比较字符串的大小。
以下内容可帮助您确定问题:
std::map<std::string, std::string>
std::string key = "KEY";
std::string key2 = "KEY";
key2.resize(100);
现在,如果您在“KEY”上映射了某些内容并使用key2来访问它,那么您将无法获得预期的值。
JAV