从元组向 std::map 插入值

Insert value to a std::map from a tuple

本文关键字:map 插入 std 元组      更新时间:2023-10-16

我只是在学习图的数据结构。而我被困在这样的境地。
我把我的Graph课写成

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

其中char类型的Args表示我Graph的顶点。 但是,当我想在我的 Graph 中搜索时,我需要将char的每个顶点及其索引作为std::pair<char,size_t>插入Argsstd::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>. 它当然不起作用,因为std::get<>中使用的i不是constexpr。 我现在能做的就是

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

但这不是我想要的结果。那么还有其他解决方案适合我吗?
感谢您的任何帮助!

std::map<char,size_t>还是std::map<size_t,char>
我会和std::map<size_t,char>一起去.

你需要 C++14 的 std::index_sequence1

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 个实现C++11。