C++如何检查给定输入是否存在于对 vector 中?

标签 c++ string algorithm vector std-pair

有一个简单的电话簿,其内容以 vector 形式给出。该程序应要求用户输入姓名并提供号码(如果存在),否则会发出警告。它应该用 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>') .预期输出是给定输入名称的电话号码。

最佳答案

改用

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

否则你正在尝试比较 std::pair<std::string, std::string> 类型的对象使用 std::string 类型的对象如错误消息所述。

注意循环条件不好

while(nameEntered != "Exit"){

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

因为它将使用字符串 "Exit"在算法的调用中。

关于C++如何检查给定输入是否存在于对 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354704/

相关文章:

python - 如何使 Python 模拟从基类派生?

c# - 如何处理 ((List<string>)Session.Add ("")

ruby-on-rails - 获取数组内元素的距离?

C++ 移动语义

c++ - 使用可变参数模板和运行时索引构建 iterator_range

c++ - 访问类中定义的友元函数

c++ - 用 fstream 在最后一行写

string - 如何根据 rune 而不是 Go 中的字节获取子字符串索引?

algorithm - 检测数据变化的最佳哈希函数?

algorithm - 取K个元素,最大化最小距离