【问题标题】:Referencing a Value from a Nested Pair in a Map引用映射中嵌套对中的值
【发布时间】:2012-11-20 07:18:53
【问题描述】:

我有一个映射,其中包含一个 int 和一对嵌套的两个字符串:

map<int, pair<string, string> > books;

我还有一个字符串向量。

vector<string> returned;  

以及伴随它们的两个迭代器:

vector<string> returned::iterator it2; 
map<int, pair<string, string> >::iterator it3; 

我正在尝试访问嵌套在映射中的对的第一个字符串,以将其与“返回”向量的当前字符串进行比较。我正在使用两个迭代器来做到这一点。但是,我似乎无法访问嵌套对的第一个字符串。

//PUT BACK BORROWED BOOKS    
for (it2 = returned.begin(); it2 != returned.end(); it2++){ 
    //SEARCH FOR POSITION OF BOOK 
    for (it3 = books.begin(); it3 != books.end(); it3++){   
                    //PROBLEM IN LINE BELOW
        if(it2 == (it3->second-> first)) 
            int bookPos = it3 -> first;  


    }
}

有谁知道如何引用这对中的第一个字符串?显然“it->second-> first”不是解决方案。

提前致谢。

【问题讨论】:

  • 您正在将字符串与迭代器进行比较。
  • 但是迭代器中不包含字符串吗?
  • 所以你觉得车里有人就等于一个人?无论如何,一个迭代器不包含任何东西,它指向一些东西。
  • 是的,我现在明白了,谢谢。

标签: c++ dictionary vector std-pair


【解决方案1】:

有两个错误。 it3-&gt;second 不是迭代器。同样正如 cmets 中提到的,您正在将 it2(迭代器)与字符串进行比较。有错误的行应该是这样的:

if(*it2 == (it3->second.first))

【讨论】:

  • 是的,我打算建议添加一个指向 it2 的指针,但您已经进行了编辑。
【解决方案2】:

地图也是很好的查找表。映射键对应于由一对表示的两个值。下面的示例展示了如何访问键和对值。

int main()
{
typedef map<string, pair<int, int> > op_type;
op_type op = {
             {"addu", make_pair(33, 1) }
             };

vector<string> this_line;

op_type::const_iterator i = op.find(this_line[0]);
if( i != op.end() )
{
    cout << "key: " << i-first << endl;
    cout << ".first value in pair " << i->second.first << endl;
    cout << ".second value in pair " << i->second.second << endl;
}
}

打印: 关键:加杜 . 第 33 对中的第一个值 .第 1 对中的第二个值

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2012-04-27
    • 2013-12-05
    • 2013-04-30
    • 1970-01-01
    相关资源
    最近更新 更多