从元组向 std::map 插入值
Insert value to a std::map from a tuple
我只是在学习图的数据结构。而我被困在这样的境地。
我把我的Graph
课写成
template <char... Args>
class Graph{};
其中char
类型的Args
表示我Graph
的顶点。 但是,当我想在我的 Graph 中搜索时,我需要将char
的每个顶点及其索引作为std::pair<char,size_t>
插入Args
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>
. 它当然不起作用,因为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。
相关文章:
- 将重物插入std::map
- 为什么映射插入和 map.find() 的单次迭代比插入和 map.find() 的两次单独迭代慢得多
- 找不到最新插入到 std::map 中的键
- 在 std::map 中插入数组元素
- 插入 std::set 作为 std::map 的键
- 通过构造函数插入 std::map
- 从元组向 std::map 插入值
- 为什么 std::map 插入与 c# 字典插入相比如此缓慢
- 速度/效率:我应该并行化这个std::map插入吗
- std::map 插入错误:没有运算符"<"与这些操作数匹配
- stl::map 插入一个带有约束的值
- stl:map插入值时出错
- std::map插入另一个map
- std::map:插入密钥后,它是否可以复制和移动密钥
- 为什么我的程序在向MAP插入值时会停止
- 不创建临时值的Std::map插入
- 将typedef map插入哈希表
- 采用back_inserter以使用Boost迭代器采用器从MAP插入到列表中
- map -插入一个嵌套结构体
- c++ map插入不希望的行为