模板地图。 .. 我们可以吗?

时间:2012-07-22 01:02:48

标签: c++ templates maps

我想创建一个容器(最好是map),它包含离散型的值:

KEY     Value
Omega    1.9  
Output   myoutput.out  
sizex    82  
#####    ###  

其中键是= “std :: string”,其值为“INT / DOUBLE / String”

我试着宣布类似的东西。

template<typename T>  
map<string, typename T> mymap;  

但确定它不起作用。

:(

我知道有简单的方法,将它们分成不同的变量,但这只会导致代码膨胀。我也清楚这一事实,
std::map<key_value key, class Allocator = allocator<pair<const Key,T>>
需要知道有关“key”和“value”的信息,以便在编译期间生成空间。

但这个问题困扰了我很长一段时间,只需要对它进行排序:D
有人可以告诉我:D

2 个答案:

答案 0 :(得分:2)

#include <map>

using namespace std;


union mytypes_t {
  int c;
  double i;
  char* c;
} 

int main()
{
    Map<int, mytypes_t> myObject;
}

更多关于unions

答案 1 :(得分:2)

正如您所提到的,简单的解决方案是将数据分成三个不同的数组并编写一个包装器,它将在适当的容器中找到该元素(假设执行查找的代码确实知道变量的类型,否则甚至这变得复杂了。)

或者,您可以使用变体类型(boost变体)或类型擦除(boost any)来使用将处理不同类型的容器。如果你不能使用boost,实现一些简单的类型擦除不是 复杂,但我会远离它,除非你真的需要它(即更喜欢预先罐装 - 现成的方形轮的解决方案)