我想使用 boost'sboost::adaptor::map_values
来构造 a 的所有值的向量std::map
。拿这个示例代码(或在 Godbolt 试试):
#include <boost/range/adaptors.hpp>
#include <boost/range/adaptor/map.hpp>
std::vector<int> getValueVector(const std::map<int, int> & m)
{
auto valueRange = boost::adaptors::map_values(m);
return std::vector<int>(valueRange.begin(), valueRange.end());
}
int main() {
std::map<int, int> my_map;
getValueVector(my_map);
}
海合会抱怨:
error: no match for call to '(const boost::range_detail::map_values_forwarder) (const std::map<int, int>&)'
我能找到的所有示例和所有文档都只在接受范围的语句(如基于范围的 for 循环或 )中使用 boost 适配器,而不是在需要像构造boost::copy
函数这样的迭代器对的语句中。std::vector
根据 GCC,这里的问题map_values
是不适用于std::map<int, int>
. 但是,这实际上是 docs 给出的唯一示例,所以我很确定这std::map<int, int>
对于map_values
.
这里有什么问题?
PS:我知道有无数其他方法可以从地图的值中优雅地构造一个向量。我想知道为什么这段代码不起作用。此外,这种方法具有保证 RVO 的额外好处,而不是“可能是 NRVO”,这是我能想到的大多数其他解决方案。