将地图/多重地图键复制到矢量或集
Copy map/multimap keys to vector or set
我在下面编写了代码,将map
或multimap
中的键转换为set
:
template<typename STLContainer>
inline auto CopyContanerKeyToSet(const STLContainer& cont)
{
std::set<decltype(cont.begin()->first)> lset;
std::transform(cont.begin(),cont.end(),std::inserter(lset,lset.end()),[](const auto it) { return it.first;});
return lset
}
现在要求有时我也需要将密钥转换为vector
。所以我只想知道如何编写可以接受vector
或set
作为模板参数的模板函数,然后相应地创建该容器。
我们可以使用模板模板参数来解决这个问题。 这允许我们只指定主类型,而不指定该类型的模板类型。 这样做给了我们
template< template<typename ...> class OutputContainer, typename STLContainer>
inline auto CopyContanerKeyToSet(const STLContainer& cont)
{
OutputContainer<typename STLContainer::key_type> lset;
std::transform(cont.begin(),cont.end(),std::inserter(lset,lset.end()),[](const auto it) { return it.first;});
return lset;
}
然后我们可以用这样的东西来使用它
int main()
{
std::map<std::string, int> foo{ {"this", 1}, {"second", 1} };
auto output = CopyContanerKeyToSet<std::vector>(foo);
for (const auto& e : output)
std::cout << e << " ";
}
这给了我们
second this
现场示例
我还<decltype(cont.begin()->first)>
更改为<typename STLContainer::key_type>
,因为map
/multimap
value_type
对std::pair
有一个const key_type
,我们不想要vector
/set
。
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何在没有复制构造函数的情况下为地图设置值?
- 如何启动地图的复制构造函数?
- C++将所有元素从矢量复制到地图/unordered_map的最佳方法
- Qt C++ 如何将哈希的副本复制到地图
- 从地图复制到指针列表
- 将地图/多重地图键复制到矢量或集
- 将映射从第二个元素复制到另一个地图
- 如何使用STL复制地图,过滤和减少C 的行为
- 复制地图<双精度,元组<双精度,双精度>>映射<双精度,双精度>没有循环?
- 如何将std ::映射的第一个N元素复制到另一个地图
- C++ <algorithm>: 复制地图<A,B> 到库特?
- 使用不可复制(但可移动)键移动地图分配时出错
- 如何使用转换将文件复制到地图
- 在地图中插入对象而不复制对象
- 将列表复制到C++中的地图
- 如何将地图的反面复制到另一张地图上
- 这个不可复制的地图是合法的c++11吗?GCC 4.7和MSVS 2010允许.Clang 3.1不允许
- 如何在列表中传输地图的内容而不复制它
- 是否可以将STL复制功能与地图一起使用