从特定的第一个元素获取向量对的第二个元素
get second element of a vector pair from specific first element
如何从特定的第一个元素中获取向量对的第二个元素?
我有以下代码:
vector< pair <string, string> > vect;
vect.push_back(make_pair("hello","s:hihi"));
vect.push_back(make_pair("hi","s:hello"));
string check;
string first;
string last;
while(true)
{
cout << "Create new pair.\nFirst element: ";
//Part1
getline(cin, first);
cout << "Second element: ";
//Part2
getline(cin, last);
if(first == "get" && last == "get") break;
else vect.push_back(make_pair(first, last));
}
cout << "What first element to search: ";
//Part3
getline(cin, check);
我想检查用户是否在第 3 部分输入了 hello,它会计算出 s:hihi。通过这种方式,如果用户在第 3 部分输入 hi,它将输出 s:hello。如果用户在第 1 部分输入“bye”并在第 2 部分输入“hey”。那么当用户在第 3 部分输入“bye”时,它将打印出“hey”
我该怎么做?
如果您坚持使用 std::vector<std::pair<std::string, std::string>>
而不是 std::map
或 std::unordered_map
那么我建议这样:
auto it = std::find_if(std::begin(vect), std::end(vect), [&check](const auto & pair){
return pair.first.compare(check) == 0;}); // this returns the iterator to the pair
(*it).second // << access to the second string
这使用 std::find_if
接受一个 lambda。
但是就像评论已经说的那样,这是地图的完美场景。
如何从特定的第一个元素中获取向量对的第二个元素?
我有以下代码:
vector< pair <string, string> > vect;
vect.push_back(make_pair("hello","s:hihi"));
vect.push_back(make_pair("hi","s:hello"));
string check;
string first;
string last;
while(true)
{
cout << "Create new pair.\nFirst element: ";
//Part1
getline(cin, first);
cout << "Second element: ";
//Part2
getline(cin, last);
if(first == "get" && last == "get") break;
else vect.push_back(make_pair(first, last));
}
cout << "What first element to search: ";
//Part3
getline(cin, check);
我想检查用户是否在第 3 部分输入了 hello,它会计算出 s:hihi。通过这种方式,如果用户在第 3 部分输入 hi,它将输出 s:hello。如果用户在第 1 部分输入“bye”并在第 2 部分输入“hey”。那么当用户在第 3 部分输入“bye”时,它将打印出“hey”
我该怎么做?
如果您坚持使用 std::vector<std::pair<std::string, std::string>>
而不是 std::map
或 std::unordered_map
那么我建议这样:
auto it = std::find_if(std::begin(vect), std::end(vect), [&check](const auto & pair){
return pair.first.compare(check) == 0;}); // this returns the iterator to the pair
(*it).second // << access to the second string
这使用 std::find_if
接受一个 lambda。
但是就像评论已经说的那样,这是地图的完美场景。