gpt4 book ai didi

c++ - 返回变换迭代器范围的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 23:04:50 25 4
gpt4 key购买 nike

假设我想写一个简单的函数 keys 接受一个 std::map 并返回一个提供键的 iterator_range的 map 。我该怎么做?

template<typename A, typename B>
Range<A> keys(const std::map<A, B> & m) { ??? }

我想将相同的模式应用于其他各种容器,但我认为这是一个很好的原型(prototype)示例。

编辑:我猜我需要 Boost 的 range_adapter 和/或 transform_iterator 领域的东西,但我不是足够熟悉它们,可以在此处应用它们。

最佳答案

boost::adapters::keys 满足了这一特殊需求.更一般地说,boost::range允许您设计自己的适配器,但有点复杂。所以除非你正在设计一个新的图书馆,否则你可能会逃脱 transformed .

如果您需要将范围的结果放回容器中,您可以编写一个简单的 collect函数将“收集”boost::range 的结果管道。

template<typename Output, typename SinglePassRange>
Output collect(const SinglePassRange & rng)
{
Output r;
boost::range::copy(rng, std::inserter(r, boost::begin(r)));
return r;
}

现在您可以轻松地创建一些小函数和

  • collect<vector<int>>(numbers | filtered(odd))
  • collect<vector<int>>(numbers | transformed(doubled))
  • collect<vector<K>>(myMap | transformed(keyOf))

关于c++ - 返回变换迭代器范围的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356991/

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