gpt4 book ai didi

c++ - 将映射/多映射键复制到 vector 或集合

转载 作者:行者123 更新时间:2023-11-30 03:32:43 26 4
gpt4 key购买 nike

我写了下面的代码来将 mapmultimap 中的键转换为 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。所以我只想知道如何编写可以接受 vectorset 作为模板参数的模板函数,然后相应地创建该容器。

最佳答案

我们可以使用Template 模板参数 来解决这个问题。这允许我们只指定主要类型而不指定该类型的模板类型。这样做给了我们

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 

Live Example


我也改了<decltype(cont.begin()->first)><typename STLContainer::key_type>作为value_typemap/multimap有一个 const key_type对于 std::pair我们不希望 vector/set .

关于c++ - 将映射/多映射键复制到 vector 或集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43346387/

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