C ++如何检查给定输入是否存在于对向量中?
C++ how to check if given input exists in the vector of pairs?
有一本简单的 phone 书,内容以矢量形式给出。该程序应要求用户输入姓名并提供号码(如果存在),否则会发出警告。它应该用 Exit 离开 phone 书。我收到迭代器部分的错误。我该如何解决?
我为此创建了一个迭代器: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>')
。预期输出是给定输入名称的 phone 个数。
改用
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"
。
有一本简单的 phone 书,内容以矢量形式给出。该程序应要求用户输入姓名并提供号码(如果存在),否则会发出警告。它应该用 Exit 离开 phone 书。我收到迭代器部分的错误。我该如何解决?
我为此创建了一个迭代器: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>')
。预期输出是给定输入名称的 phone 个数。
改用
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"
。