std :: map <std :: string,enum =“”>不保存值</std :: string,>

时间:2013-07-24 10:20:10

标签: c++ c++11 enums stdstring stdmap

我正在编写解析器,我决定将类型信息保存在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来访问它,我会得到我刚刚设置的值。

1 个答案:

答案 0 :(得分:0)

比较字符串作为地图的关键字时,不仅要比较字符串的内容,还要比较字符串的大小。

以下内容可帮助您确定问题:

std::map<std::string, std::string>

std::string key = "KEY";
std::string key2 = "KEY";

key2.resize(100);

现在,如果您在“KEY”上映射了某些内容并使用key2来访问它,那么您将无法获得预期的值。

JAV