从元组向std :: map插入值

时间:2018-05-23 15:11:33

标签: c++ c++11 stdmap stdtuple

我只是在学习图形的数据结构。我陷入了这种情况 我写了Graph类,如

template <char... Args>
    class Graph{}; 

Argschar表示Graph的顶点。 但是,当我想在我的图表中搜索时,我需要将char的每个顶点及其Args中的索引作为std::pair<char,size_t>插入std::map<char,size_t>。我有什么完成是我构建了一个std::tuple喜欢

 std::tuple<decltype(Args)...> t(Args...);

然后我想这样做

 for(size_t i =0;i<sizeof...(Args);++i)
      Map.insert({0,std::get<i>(t)});

哪个地图表示std::map<size_t,char>。 它当然不起作用,因为i中使用的std::get<>不是constexpr。 我现在可以做的是逐个插入地图,如

Map.insert({0,std::get<0>(t)});
Map.insert({1,std::get<1>(t)});
Map.insert({2,std::get<2>(t)});

但这不是我想要的结果。那么我还有其他解决方案吗? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

std::map<char,size_t>std::map<size_t,char>
我会选择std::map<size_t,char>

你需要C ++ 14的std::index_sequence 1

template <char... Chars, std::size_t... Ints>
void fill_map(std::map<size_t, char> & your_map, std::index_sequence<Ints...>) {
    using swallow = int[];
    (void)swallow{0, (your_map.emplace(Ints, Chars), 0)... };
}

template <char... Chars>
void fill_map(std::map<size_t, char> & your_map) {
    fill_map<Chars...>(your_map, std::make_index_sequence<sizeof...(Chars)>{});
}

使用:

std::map<size_t,char> your_map;
fill_map<Args...>(your_map);

<小时/> 1 implementation for C++11