使用通用值初始化 std::map,不重复
Initialize std::map with common values without duplication
我想创建一个编译时已知的关系的静态映射:
{
{k11, v1}, {k12, v1}, {k13, v1}, ...
{k21, v2}, {k22, v2}, {k23, v2}, ...
...
{kn1, vn}, {kn2, vn}, {kn3, vn}, ...
}
这可能包括每行的许多键值对,因此,我宁愿这样写:
{
{v1, {k11, k12, k13, ...}},
{v2, {k21, k22, k23, ...}},
...
{vn, {kn1, kn2, kn3, ...}}
}
实现此目的的最简单(最易读(的方法是什么?
我能想到的一个解决方案是使用以下函数:
#include <vector>
#include <tuple>
#include <map>
template <typename TValue, typename TKey>
std::map<TKey, TValue> reverse_map(
std::vector<std::tuple<TValue, std::vector<TKey> > > const & relations){
std::map<TKey, TValue> res;
for (auto const & value_keys : relations){
for(auto const & key : std::get<1u>(value_keys))
res[key] = std::get<0u>(value_keys);
}
return res;
}
我不确定通过这样的函数如何影响运行时间。 我很高兴听到是否有人对此有见解,或者更好的解决方案。
相关文章:
- 存储在 std::map/std::set 中,与在存储所有数据后对向量进行排序
- 如何在<N>不发生内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset*>?
- 无法在 std::map<std::string,std::shared_ptr 中设置值<class>>
- 如何在C++中迭代集合映射(std::map<std::set< char>, int >)?
- 如何初始化结构字段 std::map<std::string, std::string>称为参数
- issue with std::map std::find
- 为什么 std::map< std::map >不释放内存?
- C++ map<std::string> vs map<char *> 性能(我知道,"again?" )
- 确定运行时std::map/std::set的内存使用情况
- 映射上的模板参数无效 std::map< std::string, Stock*> &Stock
- 我的SFINAE检查std::map/std::vector有什么问题
- 使用 std::map<std::string, int> 计算表达式树
- 将数据从两种不同的数据结构插入 std::map <std::string, int> mymap 并通过套接字发送
- 类中的编译器错误,数据类型为 typedef map<std::string,std::p air<std::string,vector<int>>> MapPai
- C++ std::map<std::string, std::set<std::string>> .如何循环设置值?
- 如何填写和访问 std::map<std::p air<enum1, enum2>, funcPtr>?
- 二进制'<':找不到 map<std::string shared_ptr 的运算符<Foo>>
- 如何将 2 个字符* 数组直接映射到 std::map<std::string,std::string>
- C++ std::map<std::string, int> 获取键以特定字符串开头的值
- 从取消引用的迭代器返回 std::map<std::string, int> 时出现巨大的内存泄漏