Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在集合中查找值_C++_Boost_Boost Hana - Fatal编程技术网

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中包含运行时值是有意义的。