C++ boost标记器的访问元素

C++ boost标记器的访问元素,c++,boost,tokenize,C++,Boost,Tokenize,我正在尝试使用boost将文件的列分配给std::map。我希望将每行中的元素0分配给索引,将元素2分配给值。有没有一种不用迭代器就可以做到这一点的方法?地址查找行不工作 #include <iostream> #include <fstream> #include <string> #include <map> #include <boost/tokenizer.hpp> #include <boost/lexical_cas

我正在尝试使用boost将文件的列分配给std::map。我希望将每行中的元素0分配给索引,将元素2分配给值。有没有一种不用迭代器就可以做到这一点的方法?地址查找行不工作

#include <iostream>
#include <fstream> 
#include <string>
#include <map>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>

int main()
{
  std::ifstream myfile("core_info_lowbits.tab", std::ios_base::in);
  std::string line;
  typedef boost::tokenizer<boost::char_separator<char> >  tokenizer;
  boost::char_separator<char> sep(" ");
  std::map<std::string, unsigned int> addr_lookup;

  while ( std::getline (myfile,line) )
  {
    tokenizer tokens(line, sep);
    //Line below does not work
    addr_lookup[*tokens.begin()] = boost::lexical_cast<unsigned int> (*(tokens.begin()+2));
    for (tokenizer::iterator tok_iter=tokens.begin();
         tok_iter != tokens.end(); ++tok_iter)
          std::cout << *tok_iter << std::endl;
  }
}
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
std::ifstream myfile(“core\u info\u lowbits.tab”,std::ios\u base::in);
std::字符串行;
typedef boost::标记器标记器;
boost::字符分隔符sep(“”);
地图地址查找;
while(std::getline(myfile,line))
{
标记器标记(行、sep);
//下面的行不起作用
addr_lookup[*tokens.begin()]=boost::lexical_cast(*(tokens.begin()+2));
for(tokenizer::iterator tok_iter=tokens.begin();
tok_iter!=tokens.end();++tok_iter)

std::cout您正试图使用
+
推进迭代器,这是不可能的

使用:

tokenizer::迭代器it1,it2=tokens.begin();
it1=it2;
++it2;++it2;
addr_lookup[*it1]=boost::词法转换(*it2);
或者简单地说

tokenizer::iterator it1,it2= tokens.begin();
it1=it2;
std::advance(it2,2);
addr_lookup[*it1] = boost::lexical_cast<unsigned int> (*it2);
tokenizer::迭代器it1,it2=tokens.begin();
it1=it2;
标准:预付款(it2,2);
addr_lookup[*it1]=boost::词法转换(*it2);

您试图使用
+
推进迭代器,这是不可能的

使用:

tokenizer::迭代器it1,it2=tokens.begin();
it1=it2;
++it2;++it2;
addr_lookup[*it1]=boost::词法转换(*it2);
或者简单地说

tokenizer::iterator it1,it2= tokens.begin();
it1=it2;
std::advance(it2,2);
addr_lookup[*it1] = boost::lexical_cast<unsigned int> (*it2);
tokenizer::迭代器it1,it2=tokens.begin();
it1=it2;
标准:预付款(it2,2);
addr_lookup[*it1]=boost::词法转换(*it2);

需要增加两次(OP表示索引2处的元素)。那么
std::advance
?:)需要增加两次(OP表示索引2处的元素)。那么
std::advance
?:)呢?所以我将其转换为std::vector,它可以工作,但不确定它是否是好的编程风格:std::vector s_tmp(tokens.begin(),tokens.end());因为您可以增加
std::vector的迭代器,所以我将其转换为std::vector,它可以工作,但不确定它是否是好的编程风格:std::vector s_tmp(tokens.begin(),tokens.end());因为您可以增加
std::vector的迭代器