从特定的第一个元素获取向量对的第二个元素

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::mapstd::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。

但是就像评论已经说的那样,这是地图的完美场景。