【发布时间】:2021-11-12 15:35:54
【问题描述】:
我曾采访过一家跨国公司。他给了我以下代码,并要求我将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
【问题讨论】:
-
这个问题毫无意义。 Find 已经区分大小写,它只在地图上找到一个元素。您使用 find 返回的迭代器进行迭代,本质上,迭代您的所有地图 - 但这并不意味着 find 不区分大小写。尝试将除
TEST以外的地图元素替换为以Z开头的任何内容 - 您将看到相同的结果。 -
短版:您不需要枚举从标准容器中获得的每个迭代器。如果你想要的东西被发现了,迭代器就会引用它;如果没有找到,迭代器将是
mp.end()。真的就是这么简单。我不知道你为什么要使用枚举循环,以及地球上的什么力量告诉你这样做,但无论它是什么,它都是错误的。
标签: c++ c++11 find stdmap c++-standard-library