1

我想创建一个包含离散类型值的容器(最好是地图):

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

4

2 回答 2

2
#include <map>

using namespace std;


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

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

更多关于工会

于 2012-07-22T01:22:19.343 回答
2

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

或者,您可以使用变体类型(增强变体)或类型擦除(增强任何)来使用将处理不同类型的容器。如果你不能使用 boost,那么实现一些简单的类型擦除并不那么复杂,但除非你真的需要它,否则我会远离它(即,比起你自己的方轮,更喜欢预制的现成解决方案)

于 2012-07-22T01:43:22.667 回答