【发布时间】:2012-09-20 16:55:40
【问题描述】:
我有一个 Visual Studio 2008 C++03 项目,我想将键值对文件读入 std::map。
为此,我创建了一个istreambuf_pair_iterator,如下所示:
typedef std::map< std::string, std::string > Properties;
class istreambuf_pair_iterator :
public boost::iterator_adaptor< istreambuf_pair_iterator,
std::pair< std::string, std::string >*,
boost::use_default,
boost::forward_traversal_tag >
{
public:
istreambuf_pair_iterator() : sb_( 0 ) { };
explicit istreambuf_pair_iterator( std::istream& is ) : sb_( is.rdbuf() ) { };
private:
void increment()
{
std::string line;
std::istream is( sb_ );
std::getline( is, line );
// TODO: parse the key=value to a std::pair
// where do I store the pair???
};
friend class boost::iterator_core_access;
std::streambuf* sb_;
};
Properties ReadProperties( const char* file )
{
std::ifstream f( file );
Properties p;
std::copy( istreambuf_pair_iterator( f ),
istreambuf_pair_iterator(),
std::inserter( p, p.end() ) );
return p;
}
一旦我有一个由从文件中读取的字符串制成的std::pair<>,我应该将它存储在哪里,以便std::inserter 可以将其插入std::map?
【问题讨论】:
-
从未使用过
boost_iterator_adapter,我能提出的唯一建议是确保您的迭代器的operator *()返回std::pair<>按值。您不必将其存储在任何地方。当然在你的情况下*it = /* some pair */没有意义。所以你不必支持它。
标签: c++ map boost-iterators