【问题标题】:Hashmap of Vectors in C++C++中向量的哈希图
【发布时间】:2011-12-11 23:14:42
【问题描述】:

我想在 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;
}

以上代码编译失败。错误包括在相关行旁边。这与我省略了可选参数(散列和比较)的值有什么关系吗?

【问题讨论】:

  • 尝试使用月份数字而不是密钥名称。比如一月=0,二月=1等等。然后你的电话看起来像这个月[1] = v;

标签: c++ vector hashmap


【解决方案1】:

您的哈希图使用整数键而不是字符串。这应该可以解决它:

hash_map<std::string, std::vector<int> > months;

【讨论】:

    【解决方案2】:

    与其他 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 而不是二月,也可以将 enum 从 1 开始。这对你来说可能更有意义。我认为公众应该将一月称为 0,但也许这只是我。 0 可以更改为 NULL_MONTH 或 INVALID_MONTH,或者任何适合您的设计。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        密钥是int,你给出了一个字符串。将声明更改为:

        hash_map<std::string, std::vector<int> > months;
        

        【讨论】:

          【解决方案5】:
          hash_map<int, std::vector<int> > months;
          

          这个 hashmap 的关键是一个 int,但你试图将字符串“february”放入其中。

          【讨论】:

            【解决方案6】:

            问题在于,months 是一个 hash_map,其键是 int。在months["february"] 你正在传递一个char const * 您可能希望使用 syd::string 作为键。

            例如 hash_map&lt;std::string, std::vector&lt;int&gt; &gt; months;

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-01-31
              • 2017-07-24
              • 2019-03-26
              • 2013-07-02
              • 1970-01-01
              • 2012-08-29
              • 1970-01-01
              • 2017-11-03
              相关资源
              最近更新 更多