5

int とネストされた 2 つの文字列のペアを含むマップがあります。

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

文字列のベクトルもあります。

vector<string> returned;  

そして、それらに付随する 2 つの反復子:

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

マップにネストされているペアの最初の文字列にアクセスして、「返された」ベクトルの現在の文字列と比較しようとしています。これを行うために 2 つのイテレータを使用しています。ただし、ネストされたペアの最初の文字列にアクセスできないようです。

//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」は解決策ではありません。

前もって感謝します。

4

2 に答える 2

3

2 つのエラーがあります。it3->secondイテレータではありません。また、コメントで述べたように、it2 (イテレータ) と文字列を比較しています。エラーのある行は次のようになります。

if(*it2 == (it3->second.first))
于 2012-12-02T19:28:59.133 に答える
0

マップは、適切なルックアップ テーブルも作成します。マップ キーは、ペアで表される 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;
}
}

出力: key: addu .ペア 33 の最初の値 .ペア 1 の 2 番目の値

于 2015-06-16T14:12:57.653 に答える