从特定的第一个元素获取向量对的第二个元素
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<std::string, std::string>
或std::unordered_map<std::string, std::string>
的任何原因?
这是std::map
的好场景。
不,为什么,我更喜欢矢量。
这能回答你的问题吗? How to find out if an item is present in a std::vector?
【参考方案1】:
如果您坚持使用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。
但是就像 cmets 已经说过的那样,这是地图的完美场景。
【讨论】:
以上是关于从特定的第一个元素获取向量对的第二个元素的主要内容,如果未能解决你的问题,请参考以下文章