C ++如何检查给定向量是否存在于成对向量中?

问题描述 投票:0回答:1

有一本简单的电话簿,其中的向量是矢量。该程序应要求用户输入名称,如果存在则显示该号码,否则发出警告。并且它应该将电话簿保留为Exit。迭代器部分出​​现错误。我该如何解决?

我为此目的创建了一个迭代器:vector <pair < string , string >>::iterator it;,但是出现错误:invalid operands to binary expression ('std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >' and 'const std::__1::basic_string<char>')

int main()
{
    //phone book
    vector <pair < string , string >>
    vec { make_pair ("Homer", "1111"),
    make_pair ("Marge", "2222"),
    make_pair ("Lisa", "3333"),
    make_pair ("Magy", "4444"),
    make_pair ("Bart", "5555")};

    std::string nameEntered;
    vector <pair < string , string >>::iterator it; //create iterator

    //unless Exit entered;
    while(nameEntered != "Exit"){

            //take input from user
            cout<<"Enter name (or Exit ): ";
            std::cin >> nameEntered; 

            it = std::find(vec.begin(), vec.end(), nameEntered);
            //if given input exists, returns the corresponding phone number
            if(it != vec.end()){

            std::cout << "Phone number is: " << (*it).second << endl; //displays the phone number for given input name

            }

            else{

                std::cout << "No such phone number!"; //warns the user
            }
    }
}

我收到错误:invalid operands to binary expression ('std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >' and 'const std::__1::basic_string<char>')。预期的输出是给定输入名称的电话号码。

c++ string vector stdvector std-pair
1个回答
0
投票

改为使用

it = std::find_if( vec.begin(), vec.end(), 
                   [&nameEntered]( const auto &p ) { return p.first == nameEntered; } );

否则,您将尝试按照错误消息将std::pair<std::string, std::string>类型的对象与std::string类型的对象进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.