提问人:Jayesh 提问时间:9/18/2021 最后编辑:JeJoJayesh 更新时间:9/18/2021 访问量:129
如何使 std::map::find 函数区分大小写?
How to make std::map::find function case sensitive?
问:
我曾面试过一家跨国公司。他给了我以下代码,并要求我使函数区分大小写。我试过了,但无法理解如何使内置查找功能区分大小写。有没有办法使仅查找特定键值区分大小写?find()
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> mp;
mp["Test"] = 1;
mp["test"] = 2;
mp["TEST"] = 3;
mp["tesT"] = 4;
for (auto it = mp.find("TEST"); it != mp.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}
输出:
TEST 3
Test 1
tesT 4
test 2
但我预计输出是:
TEST 3
答:
6赞
JeJo
9/18/2021
#1
问题出在for循环上。您无需遍历地图即可打印它。相反,你需要做
auto it = mp.find("TEST");
if (it != mp.end())
std::cout << it->first << " " << it->second << std::endl;
将找到一个指向键值对的迭代器,该键值对恰好具有键,如果没有找到,则仅找到结束迭代器。std::map::find
"TEST"
1赞
Jerry Coffin
9/18/2021
#2
这里发生的事情是,它正在找到“TEST”,然后你遍历地图的其余部分,并打印出之后的所有内容。
碰巧的是,在大多数常见的字符集中,大写字母在小写字母之前排序,因此将成为 中的第一项。因此,当您从那里打印出来时,您最终会打印出所有项目。TEST
map
但是 a 只能使用特定键保存一个项目,因此没有真正的理由进行迭代。您要么找到了一个项目 (),要么没有找到 ()。map
it != container.end()
it == container.end()
如果您使用的是 ,则可能有多个项目具有相同的键。在这种情况下,您通常希望使用该键来查找所有项目。这将返回一对迭代器,一个到范围的开头,另一个经过具有该键的项目范围的末尾。然后,您将打印出它返回的范围内的所有项目。multimap
std::equal_range
评论
TEST
Z
mp.end()