【问题标题】:C++ how to check if given input exists in the vector of pairs?C ++如何检查给定输入是否存在于对向量中?
【发布时间】:2019-10-12 13:34:32
【问题描述】:

有一个简单的电话簿,其内容以矢量形式给出。程序应要求用户输入名称,如果存在则显示数字,否则发出警告。它应该将电话簿与 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&lt;std::__1::basic_string&lt;char&gt;, std::__1::basic_string&lt;char&gt; &gt;' and 'const std::__1::basic_string&lt;char&gt;')。预期的输出是给定输入名称的电话号码。

【问题讨论】:

  • 使用地图。它是为这样的情况而创建的。

标签: c++ string algorithm vector std-pair


【解决方案1】:

改为使用

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

否则,您会尝试将std::pair&lt;std::string, std::string&gt; 类型的对象与std::string 类型的对象进行比较,如错误消息所述。

注意循环的条件不好。

while(nameEntered != "Exit"){

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

因为它会在算法调用中使用字符串"Exit"

【讨论】:

  • 使用地图更容易
  • 它说“错误:lambda参数中不允许'auto'”
  • @L.F.我同意。但这并不能解释错误。:)
  • @excalibur26 将其更改为 const std::pair<:string std::string> &p.
猜你喜欢
  • 2014-12-03
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
相关资源
最近更新 更多