我曾在一家跨國公司面試過。他給了我下面的代碼,讓我把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"/span>] = 4;
for (auto it = mp. find("TEST"); it != mp.end() ; it )
{
cout << it->first << " " << it-> second << endl;
}
return 0;
}
輸出 :
TEST 3
測驗 1
tesT 4
測驗2
但我期望的輸出是:
TEST 3
uj5u.com熱心網友回復:
問題在于for回圈。你不需要通過迭代地圖來列印它。相反,你需要做的是
auto it = mp.find("TEST")。
if (it != mp.end()
std::cout << it->first << " " << it-> second << std::endl。
std::map::find將找到一個指向鍵值對的迭代器,其鍵值正好是"TEST",如果沒有找到,就只找到末端迭代器。
uj5u.com熱心網友回復:
這里發生的事情是,它找到了 "TEST",然后你在地圖的剩余部分中進行迭代,并列印出后面的所有內容。
正如它所發生的,在大多數常見的字符集中,大寫字母排序在小寫字母之前,所以TEST將是map中的第一個專案。所以當你從這里開始列印東西時,你最終會列印出所有的專案。
但是一個map只能容納一個具有特定鍵的專案,所以沒有真正的理由進行迭代。你要么找到那個專案 (it != container.end()) 要么沒有 (it == container.end()) 。
如果你使用的是一個multimap,可能有多個具有相同鍵的專案。在這種情況下,你通常想使用std::equal_range來找到所有具有該鍵的專案。這將回傳一對迭代器,一個是范圍的開始,另一個是超過該鍵的專案范圍的結束。然后你將列印出它所回傳的范圍內的所有專案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329399.html
標籤:
上一篇:來自守護行程的錯誤回應。OCI運行時創建失敗:container_linux.go:380:啟動容器行程導致:exec:"python"。
