Vector <tuple>,make_tuple <int,ignore,=“”float =“”>

时间:2016-11-24 16:51:40

标签: c++ vector tuples

我创建了一个元组向量:

std::vector<std::tuple<int*, bool, int*>> *DataStucture;

接下来,我想迭代一个数据集,只获取每个元组的第一个元素。

这是合法的吗?

DataStructure -> push_back(std::make_tuple(some_pointer_to_some_int_value, std::ignore, std::ignore));

在下一轮数据集扫描中,我比较了some_int_value的值,并在匹配I set后跟随DataStructure的两个元素:

DataStructure -> push_back(std::make_tuple(std::ignore, some_bool_value, some_pointer_to_some_int_value2);

我不确定std::ignore的确切含义。我试过检查cpp参考网站,但我没有得到它。

2 个答案:

答案 0 :(得分:2)

我正在阅读http://en.cppreference.com/w/cpp/utility/tuple/ignore

我认为你不能这样做,因为std :: ignore仅用作左值占位符。

例如,如果您有一个不想使用的返回值,则可以执行以下操作。

std::ignore = AFunctionWithAReturnValue();

它不能用作右值的一部分。出于您的目的,我只是在第一次扫描期间填写占位符值,如下所示:

std::make_tuple(some_pointer_to_some_int_value, false, nullptr);

答案 1 :(得分:1)

为了详细说明我以前的评论,你不能在这里使用- my_module - debug: msg="My new fact {{ my_data }}" ,因为它只能用作左值,但实际上你也不需要。只需使用std::ignore或任何“默认”值:

nullptr
如果要将元组解压缩为不同的值,则应使用

DataStructure->push_back(std::make_tuple(some_pointer_to_some_int_value, false, nullptr));

std::ignore

在不相关的注释中,您的第二个操作不会设置现有元组的值,而是添加新元组。另外,为什么要使用指向int* p; bool b; for (auto& tuple : *DataStructure) { std::tie(p,b,std::ignore) = tuple; // p now have value of first element of tuple // b now have value of second element of tuple } 而不是vector本身或至少vector的指针?一般认为省略不必要的“裸”指针会更好。