gpt4 book ai didi

c++ - 从元组向 std::map 插入值

转载 作者:太空狗 更新时间:2023-10-29 22:55:45 25 4
gpt4 key购买 nike

我刚学图数据结构,遇到这种情况。
我写了我的 Graph

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

哪里Args类型 char表示我的顶点 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)});

哪个 map 表示std::map<size_t,char> .它肯定不起作用,因为 i用于 std::get<>不是 constexpr .我现在能做的就是像

这样一个一个地插入到 Map 中
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_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 .

关于c++ - 从元组向 std::map 插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50491890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com