c++ - What's wrong with this iterator declaration -
i have method in class, here is:
void textquery::build_word_map() { word_map = new map<string,loc*,less<string>,allocator<string> >; typedef map<string,loc*,less<string>,allocator<string> >::value_type value_type; typedef set<string,less<string>,allocator<string> >::difference_type diff_type; set<string,less<string>,allocator<string> > exclusion_set; ifstream infile( "exclusion_set" ); if ( !infile ) { static string default_excluded_words[25] = { "the","and","but","that","then","are","been", "can","can't","cannot","could","did","for", "had","have","him","his","her","its","into", "were","which","when","with","would"}; cerr << "warning! unable open word exclusion file! -- " << "using default set\n"; copy( default_excluded_words, default_excluded_words+25, inserter(exclusion_set, exclusion_set.begin())); } else { istream_iterator<string, diff_type> input_set( infile ), eos; copy( input_set, eos, inserter( exclusion_set, exclusion_set.begin() )); } vector<string,allocator<string> > *text_words = text_locations->first; vector<location,allocator<location> > *text_locs = text_locations->second; register int elem_cnt = text_words->size(); ( int ix = 0; ix < elem_cnt; ++ix ) { string textword = ( *text_words )[ ix ]; if ( textword.size() < 3 || exclusion_set.count( textword )) continue; if ( ! word_map->count((*text_words)[ix] )) { loc *ploc = new vector<location,allocator<location> >; ploc->push_back( (*text_locs)[ix] ); word_map->insert( value_type( (*text_words)[ix],ploc )); } else (*word_map) [(*text_words) [ix]]->push_back( (*text_locs) [ix] ); } }
, when try build it, i'm told it's impossible transform "std::ifstream" "std::basic_istream<_elem,_traits> &"? mean, , do (except studying iterators in-depth, ;-) )?
you have error, since use diff_type
second
template parameter. if want use diff_type
should declare istream_iterator
properly, declaration should be
istream_iterator<string, char, std::char_traits<char>, diff_type>
since istream_iterator
template< class t, class chart = char, class traits = std::char_traits<chart>, class distance = std::ptrdiff_t > class istream_iterator
as can see here
Comments
Post a Comment