当映射包含字符串向量作为值时从值获取键的有效方法

时间:2018-09-27 10:53:20

标签: c++ c++11 stdmap

如何使用作为字符串向量的值获取密钥,反之亦然。下面是我的代码。

#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库。

3 个答案:

答案 0 :(得分:3)

对于情况1,find_ifany_of的组合将起作用。

对于情况2,您可以简单地使用find的{​​{1}}方法。

unordered_map

答案 1 :(得分:2)

密钥存储在pair.first中。如图所示,如果您的用例处于循环迭代中,则只需使用它即可。

如果您的用意是没有迭代,即给定一个值来获取关联的键,则没有直接的方法可以做到这一点。您可以为每个键值建立逆映射,但是考虑到您还需要唯一值的事实,这样做并不会真正有效。

答案 2 :(得分:0)

是否为每个矢量条目创建另一张地图?

如果数组条目不是唯一的,那么您将需要执行相同的映射到矢量或使用多重映射。

还考虑使用哈希映射(unordered_map)和stringview作为减少第二个映射的内存使用的方法吗?

对不起,最好的答案是升压2向地图。您可以将这两个地图包装在自己的类中,以展示2向地图的功能。