2013-07-07 94 views
2

我应该使用什么语法来声明具有四个值的多重映射?声明一个具有四个值的多重映射

我想从类型unsigned int中添加两个更多的值后面的sc_core sc_time值。

 std::multimap<std::string, std::pair<sc_core::sc_time, sc_core::sc_time> > 

感谢

+0

只要创建一个完全像一对的模板,除了它是一个四元组。更笨拙的是,你可以使用一对结构或一对对。 – Gene

回答

5

你可以使用一个元组为:

std::tuple<key_type1, key_type2, key_typ3, key_typ4> 

例如:

#include <map> 
#include <string> 
#include <tuple> 

int main(int argc, char* argv[]) 
{ 
    std::map<std::tuple<int, int, float, float>, std::string> myMap; // if you meant 4 values as a key 
    std::map<std::string, std::tuple<int, int, float, float>> myMap2; // if you meant 4 values for each string key 

    return 0; 
} 

同时,我想指出,声明一个地图时,该键的模板参数首先是值类型(请参阅here)。你的帖子含糊不清,因此我不知道这四个值是否应该是关键或价值,所以我展示了两种可能性。

编辑:由于贾敏灰色很好指出,可以缩短使用一个typedef这种深奥long类型:

typedef std::tuple<int, int, float, float> MyKeyType; 

一旦你做到了这一点,你可以在你的代码中使用MyKeyType代替。

+0

+1 @wschcom:如果您使用Typedefs,可以在这种情况下提供帮助。 ** typedef std :: tuple MyReasonablyNamedType; ** –

+0

尽管OP的含义可能是“*我想要一个键的四个值*”,不一定是“*我想要四个值* *作为**一键*“。同样的交易,只是交换他们的位置。我以同样的方式阅读,并对OP的含义感到困惑。 =) –

+1

@JaminGrey编辑,以澄清为什么我切换订单。 – Borgleader