gpt4 book ai didi

c++ - 通过索引访问 map 值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:22:44 24 4
gpt4 key购买 nike

我有这张 map :

m.insert(pair<int, string>(10, "map1"));
m.insert(pair<int, string>(11, "map2"));
m.insert(pair<int, string>(12, "map3"));
m.insert(pair<int, string>(13, "map4"));
m.insert(pair<int, string>(14, "map5"));

然后,我让用户输入一个数字:

Please select:
1. Map1
2. Map2
3. Map3
4. Map4
5. Map5

比方说,如果用户输入 3,我如何获得值:12??

最佳答案

使用您当前的设置,没有简单的方法可以做到这一点;您必须遍历 map 的所有元素,寻找具有 Map3 的元素。作为一个值。

map针对在一个方向上查找关系进行了优化。给出 map<K, V> ,您可以轻松地从 K 进行映射s 至 V s,但不是相反。原因是因为您可以存储任何 V作为一个值,不能保证你会得到一个唯一的逆。也就是说,给定这张 map :

 0 -> 0
1 -> 0
2 -> 1

没有有意义的方式来说明哪个键的值为 0;有两个这样的键,0 和 1。

这里有很多选择。首先,您可以打开 map around 而不是将字符串与整数相关联,而不是将整数与字符串相关联。根据您的用例,这似乎是您最初想要做的。如果你这样做了,那么你可以只使用方括号运算符来查找关联的值:

cout << m["Map3"] << endl;

或者,如果您担心缺失值会发生什么情况,那么您可以这样写

map<string, int>::iterator itr = m.find("Map3");
if (itr != m.end()) {
/* ... use itr to read the values ... */
}

或者,如果您确实需要从整数到字符串的映射,并且您知道每个整数都与一个唯一的字符串配对,反之亦然(即映射是双射),那么您可以使用一个Boost.Bimap对这种双向关系进行编码。这将使在键和值之间来回切换变得非常容易。

希望这对您有所帮助!

关于c++ - 通过索引访问 map 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4965345/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com