【问题标题】:4d mapping in C++?C ++中的4d映射?
【发布时间】:2012-02-15 20:52:27
【问题描述】:

你能告诉我如何写多维地图吗?对于二维地图,我做了以下操作:

map<string, int> Employees
Employees[“person1”] = 200;

我试图使用类似于以下内容的 4d 映射。

map<string, string, string, int> Employees;
Employees[“person1”]["gender"][“age”] = 200;

你能告诉我正确的方法吗?

【问题讨论】:

  • 感谢大家通过示例向我展示不同的方式。

标签: c++ visual-c++


【解决方案1】:

您通常希望将键的所有三个部分组合到一个类中,并使用一个比较运算符。您可以使用 pair&lt;pair&lt;string, string&gt;, string&gt; 或 boost::tuple 之类的东西,或者自己定义它:

class key_type { 
    std::string field1, field2, field3;
public:
    bool operator<(key_type const &other) { 
        if (field1 < other.field1)
            return true;
        if (field1 > other.field1)
            return false;
        if (field2 < other.field2)
            return true;
        if (field2 > other.field2)
            return false;
        return field3 < other.field3;
    }
};

【讨论】:

    【解决方案2】:
    map<string, map<string, map<string, int> > > employees;
    employees["person1"]["gender"]["age"] = 200;
    

    【讨论】:

      【解决方案3】:

      您可以改用std::pair 作为您的密钥。

      例如,

      typedef std::pair<std::string, std::string> key_part;
      typedef std::pair<key_part, std::string> key;
      std::map<key, int> Employees;
      

      然后可以像这样使用:

      key_part partialKey = std::pair<std::string, std::string>("person1","gender");
      key myKey = std::pair<key_part, std::string>(partialKey, "age");
      Employees[myKey] = 200;
      

      【讨论】:

        【解决方案4】:

        嵌套地图?
        map&lt;string, map&lt;string, map&lt;string, int&gt;&gt;&gt; Employees;

        或者制作类似的函数
        findEmployee(string, string, string, int)
        因为调用起来可能比挖掘三级地图更容易。

        【讨论】:

          【解决方案5】:

          我喜欢这种方法:

          std::map<std::tuple<std::string, std::string, std::string>, int> Employees;
          Employees[std::make_tuple("person1", "gender", "age")] = 200;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-11-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多