【问题标题】:what type of data structure i need for for a key linking to multiple paraments我需要什么类型的数据结构来链接到多个参数
【发布时间】:2013-01-02 20:23:04
【问题描述】:

例如我有一门课

Class foo {
    key  &KEY;
    element 1 v1;
    element 2 v2;
    element 3 v3;
};

我想使用 Key 对类的迭代器进行排序/遍历,并从 1-3 中检索 Class 元素。最好的方法是什么?我可以使用类似的东西

multimap <int, unsigned, string, unsigned>;
multimap < Key, element 1, element 2, element 3> m;

或者类似的东西来实现上面提到的功能?

【问题讨论】:

  • 为什么不像element v[3]这样的数组呢?
  • std::multimap&lt;int, std::tuple&lt;unsigned, std::string, unsigned&gt;&gt; 做到了

标签: c++ class data-structures map


【解决方案1】:

只需将您的foo 实例存储在setmultiset 中,并使用仅通过键进行比较的比较运算符。然后您可以正常迭代以使它们按排序顺序排列。

【讨论】:

    【解决方案2】:

    您可以使用 multiset 代替 multimap,因为 key 是您的类的一部分:

    class foo {
        friend bool operator < (const foo & l, const foo & r) 
        {
           return l.KEY < r.KEY;
        }
    
        key  &KEY;
        element 1 v1;
        element 2 v2;
        element 3 v3;
    };
    
    multiset<foo> MySet;
    
    // Assigning values to MySet . . .
    
    // Traversing the elements in the set:
    multiset<foo>::iterator  it = MySet.begin();
    for(;it != MySet.end() ; it++) {
        cout<< "element 1 = "<<it->v1<< ", element 2 = "<<it->v2<<", element 3 = "<<it->v3<<endl;
    }
    

    【讨论】:

      【解决方案3】:

      Multimap 用于当您希望映射中的一个键指向多个值时,所有值都属于同一类型。

      【讨论】:

        【解决方案4】:

        这是一个想法:

        struct Foo_Values
        {
          element1 e1;
          element2 e2;
          element3 e3;
        };
        
        struct Foo
          : public Foo_Values
        {
          key Key;
        };
        
        typedef std::map<key, Foo_Values> Map_Type;
        

        要插入地图:

        Map_Type my_map;
        key some_key;
        //...
        Foo_Values v;
        key k = some_key.Key;
        v = static_cast<Foo_Values>(k); // Copy the elements.
        my_map[k] = v;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 2011-04-05
          • 2015-10-23
          • 1970-01-01
          • 2020-10-08
          • 1970-01-01
          相关资源
          最近更新 更多