错误从双矢量获得价值(Error in Getting Value from Vector of P

2019-07-19 23:13发布

为什么要在对的向量的迭代器访问对的价值观时,我得到下面的错误?

vector< pair<int,string> > mapper;
if(Hash(input, chordSize) != id){
    mapper.push_back(make_pair(tmp, input));
}

for (vector< pair<int,string> >::iterator it = mapper.begin(); it != mapper.end(); ++it)
{
    cout << "1st: " << *it.first << " "           // <-- error!
         << "2nd: " << *it.second << endl;        // <-- error!
}

错误信息:

main_v10.cpp:165:25:错误: '的std ::矢量>>:迭代' 没有名为 '第一' main_v10.cpp构件:165:56:错误: '的std ::矢量>> ::迭代' 具有“第二”没有名为成员

我怎样才能解决这个问题?

Answer 1:

这是适用于指针的问题,太(迭代器的行为很像指针)。 有访问一个部件的值的指针(或迭代)指向两种方法:

it->first     // preferred syntax: access member of the pointed-to object

要么

(*it).first   // verbose syntax: dereference the pointer, access member on it

运算符优先级将您表达成

*(it.first)   // wrong! tries to access a member of the pointer (iterator) itself

它试图访问该成员first在迭代器本身,它失败,因为它没有一个叫做成员first 。 如果有,那么你倒是解引用该成员的值。


然而,在大多数这种情况下,你应该使用std::map从键映射到值。 代替vector<pair<int,string> >则应该使用map<int,string>它的行为相似(插入,迭代和东西也正好与对),但它排序为更快的随机访问在数据结构中的键:

map<int,string> mapper;
if(Hash(input, chordSize) != id){
    mapper.push_back(make_pair(tmp, input));
}

for (map<int,string>::iterator it = mapper.begin(); it != mapper.end(); ++it)
{
    cout << "1st: " << it->first << " "
         << "2nd: " << it->second << endl;
}

请注意,地图和对一个矢量之间的本质区别在于,地图通过他们的密钥对它们进行排序重新排列的元素。 插入的次序不能事后查询。 有些情况下,你不想做的案件(当插入顺序问题),所以在这种情况下,无论您的解决方案或至少含有键和值自定义类型的载体是正确的解决方案。



文章来源: Error in Getting Value from Vector of Pairs