C+中向量的Hashmap+; 我想在C++中实现一个向量的哈希映射。这是我的密码: #include <cstdlib> #include <string> #include <iostream> #include <vector> using namespace std; #include <ext/hash_map> using namespace __gnu_cxx; int main (int argc, char * const argv[]) { std::vector<int> v; hash_map<int, std::vector<int> > months; v.push_back(28); v.push_back(28); v.push_back(28); v.push_back(29); months["february"] = v; //error = invlalid conversion from const char* to int return 0; } #包括 #包括 #包括 #包括 使用名称空间std; #包括 使用名称空间_gnu_cxx; int main(int argc,char*const argv[]{ std::向量v; hash_映射个月; v、 推回(28); v、 推回(28); v、 推回(28); v、 推回(29); 月份[“二月”]=v;//错误=invlalid从常量字符*到整数的转换 返回0; }

C+中向量的Hashmap+; 我想在C++中实现一个向量的哈希映射。这是我的密码: #include <cstdlib> #include <string> #include <iostream> #include <vector> using namespace std; #include <ext/hash_map> using namespace __gnu_cxx; int main (int argc, char * const argv[]) { std::vector<int> v; hash_map<int, std::vector<int> > months; v.push_back(28); v.push_back(28); v.push_back(28); v.push_back(29); months["february"] = v; //error = invlalid conversion from const char* to int return 0; } #包括 #包括 #包括 #包括 使用名称空间std; #包括 使用名称空间_gnu_cxx; int main(int argc,char*const argv[]{ std::向量v; hash_映射个月; v、 推回(28); v、 推回(28); v、 推回(28); v、 推回(29); 月份[“二月”]=v;//错误=invlalid从常量字符*到整数的转换 返回0; },c++,vector,hashmap,C++,Vector,Hashmap,上面的代码无法编译。相关行旁边包含的错误。这与我忽略可选参数(哈希和比较)的值有关吗?您的哈希映射使用的是整数键而不是字符串。这应该可以解决这个问题: hash_map<std::string, std::vector<int> > months; hash_map<std::string, std::vector<int> > months; hash\u映射月份; 您已将密钥类型指定为int,但您正在尝试提供字符串文字…密钥为int,您正在

上面的代码无法编译。相关行旁边包含的错误。这与我忽略可选参数(哈希和比较)的值有关吗?

您的哈希映射使用的是整数键而不是字符串。这应该可以解决这个问题:

hash_map<std::string, std::vector<int> > months;
hash_map<std::string, std::vector<int> > months;
hash\u映射月份;

您已将密钥类型指定为
int
,但您正在尝试提供字符串文字…

密钥为
int
,您正在提供字符串。将声明更改为:

hash\u映射月份;
哈希映射月份;

此hashmap的键是int,但您试图将字符串“二月”放入其中

问题在于月份是一个散列映射,其键是int。在
months[“二月”]
中,您传递的是
char const*
您可能希望使用syd::string作为键

e、 g。
hash\u映射月份

不同于其他5个相同的答案。有固定的月数。没有必要用字符串存储它们。
enum
可以帮助您按名称引用它们。这将更有效率,但不是预优化,因为它也更有意义。字符串版本中的“feburary”这样的输入错误会增加一个新的月份!如果它是一个
enum
,您将得到一个编译错误,另外,如果您的编辑器使用自动完成,您将不必查找如何拼写二月

enum { JANUARY=0, FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER};
months[FEBRUARY] = v; 
如果不想污染全局名称空间,可以将其放在名称空间中。在这一点上,让它们小写会更容易

namespace Month {
enum { January=0, February,March,April,May,June,July,August,September,October,November,December};
}
months[Month::February] = v; // equivalent to months[1]=v if you prefer number

如果希望保持1月为1而不是2月,也可以在1处启动
enum
。这对你来说可能更有意义。我认为公众应该把一月称为0,但也许那只是我。可以将0更改为NULL\u MONTH或INVALID\u MONTH,或任何适合您设计的值。

尝试使用月数而不是键的名称。比如一月=0,二月=1等等。然后你的电话看起来像这个月[1]=v;
namespace Month {
enum { January=0, February,March,April,May,June,July,August,September,October,November,December};
}
months[Month::February] = v; // equivalent to months[1]=v if you prefer number