【发布时间】:2019-03-17 02:25:26
【问题描述】:
我有一个std::unordered_map 容器,其中Key 可以是两种数据类型:
- 64 位无符号整数
- 元组具有(8 位无符号整数、8 位无符号整数、16 位无符号整数、32 位无符号整数)
但是 value 是一个对象类型,这两种键类型都是一样的。
我尝试过的一件事是将密钥设为std::variant,以便它可以容纳两种类型。根据一些条件检查,key 被设置为以下类型之一:
void A::a() {
std::varaint<type1, type2> Id; //key
if (condition) {
Id = 64 bit unsigned value;
}
else {
Id = tuple<.....>;
}
}
unorderedmap[Id] = obj1;
// ^-- gives compile-time error
// (expecting Id specialized to either of the variant types)
此外,与此函数类似,我们在 unordered_map 上执行 find() 的多个函数。
unorderedmap.find(Id);
// ^-- Here also, compiler is throwing similar error
有没有办法修复 std::variant,或者我应该使用其他方法?
【问题讨论】:
-
为什么不使用
template? -
您的问题是什么? “任何建议”在这里是题外话。工作代码在这里是题外话。如果您有特定问题,我们很乐意为您提供帮助,但您需要指定它并创建一个minimal reproducible example
-
显示您的
unordered_map声明。你用的是哪个Hash和KeyEqual? -
人们说“完整且可验证”的意思是,您不应该发布有拼写错误 (
std::varaint) 或其他明显错误的代码(在 @987654335 范围之外使用Id@)。如果您需要真正的帮助,您需要发布真正的代码。您应该能够生成一个小示例,任何人都可以尝试编译并获得您得到的 literal 确切错误,并编辑您的问题以提供该代码。
标签: c++ stdtuple std-variant