【发布时间】:2021-08-13 12:30:18
【问题描述】:
我有一个std::vector 的std::variant 元素类型为int 或std::set<int>。如果迭代元素的类型为std::set<int>,我想循环这个向量和insert 一个额外的项目。但是,似乎不允许在运行时查询索引。我怎样才能做到这一点?
#include <variant>
#include <set>
#include <vector>
int main()
{
using Variants = std::variant<int, std::set<int>>;
std::vector<Variants> var_vec;
var_vec.push_back(999);
std::set<int> a = {0,1,2};
var_vec.push_back(a);
for (int i = 0; i < var_vec.size(); ++i)
{
// if the element var_vec[i] is of type std::set<int>
if (var_vec[i].index() == 1) var_vec[i].insert(888); // !ERROR! How to achieve this?
}
return 0;
}
错误信息:
error: '__gnu_cxx::__alloc_traits<std::allocator<std::variant<int, std::set<int, std::less<int>, std::allocator<int> > > >, std::variant<int, std::set<int, std::less<int>, std::allocator<int> > > >::value_type' {aka 'class std::variant<int, std::set<int, std::less<int>, std::allocator<int> > >'} has no member named 'insert'
【问题讨论】:
-
var_vec[i].insert是问题所在,而不是index -
不知道std::holds_alternative能不能帮到你
标签: c++ c++17 stdvector stdset std-variant