C++ 在集合中查找值
我有以下代码:C++ 在集合中查找值,c++,boost,boost-hana,C++,Boost,Boost Hana,我有以下代码: auto mySet = hana::make_set(2, "hi", 3.0); 如何获取特定类型的值 std::cout << mySet[???] << std::endl; std::cout您必须使用地图。如果你用不同的术语来思考,你真正想要的似乎是一个std::无序的(即键是类型,值是值)。相反,您所做的是使用std::unordered_set,其中键与值相同 所以,你应该写 auto myMap = hana::make_map(
auto mySet = hana::make_set(2, "hi", 3.0);
如何获取特定类型的值
std::cout << mySet[???] << std::endl;
std::cout您必须使用地图。如果你用不同的术语来思考,你真正想要的似乎是一个std::无序的
(即键是类型,值是值)。相反,您所做的是使用std::unordered_set
,其中键与值相同
所以,你应该写
auto myMap = hana::make_map(
hana::make_pair(hana::type_c<int>, 2),
hana::make_pair(hana::type_c<char const*>, "hi"),
hana::make_pair(hana::type_c<double>, 3.0)
);
std::cout << myMap[hana::type_c<char const*>] << std::endl;
auto myMap=hana::make\u map(
hana::make_pair(hana::type_c,2),
hana::make_pair(hana::type_c,“hi”),
hana::make_pair(hana::type_c,3.0)
);
作为旁注,上述推理的一个推论是,hana::set
仅在保存可在编译时进行比较的对象时有用,因为这些对象将用作键。因此,基本上,hana::set
对于任何运行时都几乎是无用的,而hana::map
仍然可以保存有意义的运行时值,只要键是编译时的。如果所有类型都是唯一的且hana::compariable
,我可以看到hana::set
与运行时值一起使用。在某些情况下,生成它可能比映射更有效,因为它不会生成对,而且符号长度可能会短得多。如何hana::find
返回?它必须返回一个hana::optional
,其可选性必须在编译时已知。因此,键在编译时必须具有可比性。请注意,这同样适用于hana::tuple
,但至少可以使用索引访问hana::tuple
,因此在tuple中包含运行时值是有意义的。