使用值类在c ++中实现stl map

时间:2014-02-05 07:36:14

标签: c++ map stl

我必须开发stl map,其中key是整数,其中与key相关联的值是5元组。 只有整数数据类型。

e.g key=1
value=(2,3,4,5,6)
key=2
value=(1,2,3,4,5)

等等。 我如何为插入和搜索操作实现它。

表示如何将单个键值映射到5个值的元组。 如何完成它?

2 个答案:

答案 0 :(得分:1)

根据您的数据意味着我会选择不同的方法。 如果您的值在逻辑上属于一起,即如果它们仅在组合中有意义,那么我只是将它们存储在公共数据结构中并将该数据结构存储在映射中。为此,类,结构或容器可能适合您的需要。同样,这取决于您的背景是什么是最佳选择。 如果您的值是隔离存在的,并且它们之间唯一的连接是它们共享相同的密钥,那么我将使用std::multimap

答案 1 :(得分:1)

如果您可以访问C++11,则可以使用std::tuple(或者提升元组),我相信这是您的案例中最适合的数据结构。请参阅下面的代码段,看看它是否合适:

#include<tuple>
#include<map>
#include<iostream>
#include<stdexcept>

typedef std::tuple<int, int, int, int, int > fiveIntTuple; 

void insert(std::map<int,  fiveIntTuple>& values,  
            int key, int a, int b, int c, int d, int e){

    values[key] = std::make_tuple(a,b,c,d,e);
}

fiveIntTuple search(const std::map<int, fiveIntTuple >& values, int key ){
    return values.at(key);
}

void print(const std::map<int, fiveIntTuple >& values, int key){
    try{
        fiveIntTuple t;

        t = search(values, key);

        std::cout << "For key  == " << key << " got:  " 
        << std::get<0>(t) << "," 
        << std::get<1>(t) << "," 
        << std::get<2>(t) << "," 
        << std::get<3>(t) << "," 
        << std::get<4>(t) << std::endl;         

    }catch(const std::out_of_range&){
        std::cerr << "For key " << key << " ... not found" << std::endl; 
    }
}

int main(){
    std::map<int, fiveIntTuple > my_values;
    insert(my_values, 1, 2,3,4,5,6);
    insert(my_values, 2, 1,2,3,4,5);

    print(my_values, 1);
    print(my_values, 2);
    print(my_values, 3);

    return 0;
}

执行此代码段必须获得:

For key  == 1 got:  2,3,4,5,6
For key  == 2 got:  1,2,3,4,5
For key 3 ... not found