我想创建一个容器(最好是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
答案 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,实现一些简单的类型擦除不是 复杂,但我会远离它,除非你真的需要它(即更喜欢预先罐装 - 现成的方形轮的解决方案)