我想在C ++中实现向量的hashmap。这是我的代码:
#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;
}
上面的代码无法编译。相关行旁边包含错误。是否与我有任何关系,省略了可选参数的值(哈希和比较)?
答案 0 :(得分:3)
您的hashmap使用整数键而不是字符串。这应该解决它:
hash_map<std::string, std::vector<int> > months;
答案 1 :(得分:3)
您已将密钥类型指定为int
,但您尝试提供字符串文字...
答案 2 :(得分:1)
键是int
,你给的是一个字符串。将声明更改为:
hash_map<std::string, std::vector<int> > months;
答案 3 :(得分:1)
hash_map<int, std::vector<int> > months;
这个hashmap的关键是一个int,但你试图将字符串“february”放入其中。
答案 4 :(得分:1)
问题是month是一个hash_map,其键是一个int。在months["february"]
您传递了char const *
您可能希望使用syd :: string作为键。
e.g。
hash_map<std::string, std::vector<int> > months;
答案 5 :(得分:1)
不同于其他5个完全相同的答案。有固定的月数。没有必要用字符串存储它们。 enum
可以帮助您按名称引用它们。这样会更有效,但不是预优化,因为它也更有意义。字符串版本中的“feburary”这样的拼写错误会增加新的一个月!如果它是enum
你会得到一个编译错误,如果你的编辑使用自动完成,你将不必查找如何拼写februrary。
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
。这可能对你更有意义。我认为一般公众应该把1月称为0,但也许这只是我。 0可以更改为NULL_MONTH或INVALID_MONTH,或者适合您的设计。