从地图中获取详细信息并将其保存到另一张地图中
Taking details from a map and saving it into another?
我有一个类似的地图
map<string, pair< pair<int, int>, string> >
只获取两个字符串并保存到另一个像这样的映射中最简单的方法是什么
map<string, string>
我的意思是,除了这样的事情,还有别的办法吗??
map<string, pair< pair<int, int>, string> > info;
map<string, pair< pair<int, int>, string> >::iterator i;
map<string, string> something;
for(i=info.begin(); i!=info.end(); ++i)
something[*i).first] = ((*i).second).second;
首先,我定义一个合适的类型:
struct Mapped
{
int someSignificantName;
int anotherName;
std::string yetAnother;
};
几乎没有std::pair
是可接受的解决方案的情况(除了快速破解和测试)。考虑到这一点,您定义了一个映射功能对象:
struct Remap
: std::unary_operator<std::pair<std::string, Mapped>,
std::pair<std::string, std::string> >
{
std::pair<std::string, std::string> operator()(
std::pair<std::string, Mapped> const& in ) const
{
return std::make_pair( in.first, in.second.yetAnother );
}
};
,然后使用std::transform
:
std::transform( in.begin(), in.end(),
std::inserter( out, out.end() ),
Remap() );
map<string, pair< pair<int, int>, string> > map1 /* = ... */;
map<string, string> map2;
BOOST_FOREACH (const pair<string, pair< pair<int, int>, string> > >& it, map1) {
map2[it.first] = it.second.second;
}
顺便说一下,EWTYPE。
最简单的方法是编写简单的for循环。
typedef pair<pair<int, int>, string> strange_pair_t;
typedef map<string, strange_pair_t> strange_type_t;
strange_type_t src_map;
map<string, string> dst_map;
for(strange_type_t::const_iterator it = src_map.begin(); it!=src_map.end(); ++it)
{
dst_map.insert( make_pair( it->first, it->second.second ) );
}
棘手的方式("一条线"):
std::transform( src_map.begin(), src_map.end(), inserter(dst_map, dst_map.end()),
boost::lambda::bind(
boost::lambda::constructor<pair<string,string>>(),
boost::lambda::bind( &strange_type_t::value_type::first, boost::lambda::_1 ),
boost::lambda::bind( &strange_pair_t::second, boost::lambda::bind( &strange_type_t::value_type::second, boost::lambda::_1 ) )
)
);
C++0x方式:
for_each( src_map.begin(), src_map.end(), [&dst_map](const strange_type_t::value_type& value) {
dst_map.insert( make_pair( value.first, value.second.second ) ); } );
相关文章:
- 如何从另一张地图构造一张地图
- C++显示图像并将其保持到下一张图像的最佳方法
- OpenGL Ping Pong可与一张通行证一起工作,而不是两个通行证
- 画一张卡,并打电话给它
- 洗牌一张牌
- 检查一张图片是否与另一张图片偏移
- 在 Windows 中自动将 xlsx 文件转换为多个 (MS-DOS) CSV 文件(每张一张一个)
- 把一个价格(例如89.95美元)读成一张双人床
- 如何将地图的反面复制到另一张地图上
- CUDA,我需要一张新卡吗?1.0、1.1、2.0、2.1的差异
- 如何找到不在另一张地图的键中的地图键
- 有没有一张多维地图
- 用c++中的printf制作一张表格
- 用简单的opengl图像库(SOIL)加载一张图像(颜色空间:GRAY)
- 找一张智能地图
- 使用openCv的嘴巴检测只在一张脸上返回很多圆圈
- 每隔一秒捕捉一张图像
- 一张未经设计的地图会是一个不错的选择吗
- 从地图中获取详细信息并将其保存到另一张地图中
- 在OpenCV中将两张撕破的纸合并成一张图像