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

Posted

技术标签:

【中文标题】从特定的第一个元素获取向量对的第二个元素【英文标题】:get second element of a vector pair from specific first element 【发布时间】:2021-07-29 07:18:05 【问题描述】:

如何从特定的第一个元素中获取向量对的第二个元素?

我有以下代码:

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,它将 cout s:hello。如果用户在第 1 部分输入“再见”并在第 2 部分输入“嘿”。那么当用户在第 3 部分输入“再见”时,它将打印出“嘿”

我该怎么做?

【问题讨论】:

您不使用std::map&lt;std::string, std::string&gt;std::unordered_map&lt;std::string, std::string&gt;的任何原因? 这是std::map 的好场景。 不,为什么,我更喜欢矢量。 这能回答你的问题吗? How to find out if an item is present in a std::vector? 【参考方案1】:

如果您坚持使用std::vector&lt;std::pair&lt;std::string, std::string&gt;&gt; 而不是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。

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

【讨论】:

以上是关于从特定的第一个元素获取向量对的第二个元素的主要内容,如果未能解决你的问题,请参考以下文章

将地图的第一个和第二个值上传到向量对的第一个和第二个值中

将一个向量交错和去交错成两个新向量

根据对的第二个值查找对向量的上限

实施分数背包

在 LLVM IR 中,将整数存储到向量的第二个元素中

如何从 Erlang 中的对列表中获取元素