如何使用作为字符串向量的值获取密钥,反之亦然。下面是我的代码。
#include<iostream>
#include<map>
#include<string>
#include <unordered_map>
#include <vector>
using namespace std;
int main()
{
std::unordered_map<std::string, std::vector<std::string>> Mymap;
Mymap["unique1"] = {"hello", "world"};
Mymap["unique2"] = {"goodbye", "goodmorning", "world"};
Mymap["unique3"] = {"sun", "mon", "tue"};
for(auto && pair : Mymap) {
for(auto && value : pair.second) {
std::cout << pair.first<<" " << value<<"\n";
if(value == "goodmorning") // how get key i.e unique2 ?
}}
}
情况1:输入值时。键被输出。
Input : goodmorning
output : unique2
情况2:当输入键时输出值。
Input : unique3
output: sun ,mon ,tue
注意:没有可用的Boost库。
答案 0 :(得分:3)
对于情况1,find_if
和any_of
的组合将起作用。
对于情况2,您可以简单地使用find
的{{1}}方法。
unordered_map
答案 1 :(得分:2)
密钥存储在pair.first
中。如图所示,如果您的用例处于循环迭代中,则只需使用它即可。
如果您的用意是没有迭代,即给定一个值来获取关联的键,则没有直接的方法可以做到这一点。您可以为每个键值建立逆映射,但是考虑到您还需要唯一值的事实,这样做并不会真正有效。
答案 2 :(得分:0)
是否为每个矢量条目创建另一张地图?
如果数组条目不是唯一的,那么您将需要执行相同的映射到矢量或使用多重映射。
还考虑使用哈希映射(unordered_map)和stringview作为减少第二个映射的内存使用的方法吗?
对不起,最好的答案是升压2向地图。您可以将这两个地图包装在自己的类中,以展示2向地图的功能。