Boost::range用于处理容器的内容,并将映射中的值管道到下一个进程
boost::range to process content of a container and pipe to next process with values from a map
我有一个像std::map<std::string, std::vector<int> >
的地图。我想从映射的所有子向量中创建一个向量。我可以使用循环来做,但是我想使用boost::range
库,在那里我可以将一个转换的输入管道到另一个转换,这样代码更可读和简洁。我尝试了下面的东西,但需要一些帮助才能正确地做到这一点。谢谢你
#include <boost/range/adaptor/filtered.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <iterator>
#include <vector>
#include <map>
#include <iostream>
struct GetMapValue
{
template<typename T1, typename T2>
const T2& operator()( const std::pair<T1,T2>& key_val ) const
{
return key_val.second;
}
};
struct GetINTs
{
GetINTs(std::vector<int> aVec1)
{
aMyVec = aVec1;
}
void operator()( const std::vector<int>& val )
{
aMyVec.insert( val.end(), val.begin(), aMyVec.end() );
}
private:
std::vector<int> aMyVec;
};
int main(){
std::map<std::string, std::vector<int> > x;
std::vector<int> y, z;
std::vector<int> temp;
temp.push_back(1);
temp.push_back(1);
x.insert(std::make_pair("one", temp));
temp.clear();
temp.push_back(2);
temp.push_back(2);
x.insert(std::make_pair("two", temp));
temp.clear();
temp.push_back(3);
temp.push_back(3);
x.insert(std::make_pair("three", temp));
boost::copy( x | boost::adaptors::transformed(GetMapValue), std::back_inserter(y) );
boost::copy( y | boost::adaptors::transformed(GetINTs), std::back_inserter(z) );
}
适配器已经存在并且被称为
-
boost::adaptors::map_keys
-
boost::adaptors::map_values
下面是一个示例:
Live On Coliru
#include <boost/range/adaptors.hpp>
#include <boost/range/algorithm.hpp>
#include <iostream>
#include <iterator>
#include <vector>
#include <string>
#include <map>
int main() {
std::map<std::string, std::vector<int> > x {
{ "hello", { 1,2,3 } },
{ "world", { 4,5,6 } },
};
boost::copy(x | boost::adaptors::map_keys, std::ostream_iterator<std::string>(std::cout << "Keys: ", " "));
for (auto& vec : x | boost::adaptors::map_values)
boost::copy(vec, std::ostream_iterator<int>(std::cout << "nValues: ", " "));
}
打印
Keys: hello world
Values: 1 2 3
Values: 4 5 6
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- IPC使用多个管道和分支进程来运行Python程序
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- 在C++中搜索嵌套多映射值
- 错误处理.将系统错误代码映射到泛型
- 将UNIX管道映射到C++std::cout
- Boost::range用于处理容器的内容,并将映射中的值管道到下一个进程