C++標準中std提供了幾種容器,它們包括順序容器,比如vector, list, deque, queue, stack等,關聯容器 ,比如map, set等,其中使用頻率比較高的容器是vecotor向量容器、map鍵值對容器,我們經常會使用這兩個容器來存儲數據,然後根據不同的場景來查找獲取容器內的值。而本文接下來將說明從這兩類容器中快速查找獲取數據的方法。
一、vector容器查找功能
vector容器自身沒有提供查找函數,這裡藉助標準模版庫algorithm提供的find, 使用的時候需要包含該頭文件。
首先定義vector容器變量,然後存入數據,接著遍歷列印容器內的所有數據,最後調用algorithm提供的函數find從vector向量中查找數據,algorithm提供的函數find需要輸入三個入參數,第一個參數是容器開始查找的迭代器變量,第二個變量是容器結束查找的迭代器變量,第三個參數是需要查找的數據。
運行程序,輸出的內容如下圖所示,容器內存在需要查找的數據,返回迭代器變量,我們根據迭代器變量輸出數據內容
二、map容器查找功能
map容器自身提供了查找功能,同時它也支持使用標準模版庫algorithm提供的find函數。
首先定義map容器變量,寫入數據,再遍歷輸出容器內的數據,接著調用map容器自身提供的find函數來查找key為2的數據,返回迭代器變量,然後根據這個迭代器變量輸出鍵值,接下來調用algorithm提供的find函數,需要注意的是第三個參數輸入的是迭代器的取值,最後也是返回迭代器變量。
運行程序,輸出的內容如下圖所示
三、鍵自定義的map容器查找功能
map容器使用過程中,有時候為了程序的可維護性以及降低代碼的複雜度,需要自定義類作為map的鍵,在這種場景下,上面的查找方法是否也能夠生效呢?接下來讓我們進行驗證。
首先自定義類JKeyPair來作為map的key, 如果自定義對象要作為map的鍵,那麼需要重載operator<運算符,而如果要使用algorithm中的find,需要重載operator==運算符
驗證調用map自身提供的find函數,其測試代碼如下圖所示
從運行的結果看,使用自定義對象作為key值,map容器提供的find函數能夠正確運行,並且從實際操作過程中,可以得出,map容器提供的find函數,自定義對象不需要重載operator==運算符。
接著再驗證algorithm中的find,從實際操作過程中,自定義對象需要重載operator==運算符,測試代碼段如下圖所示,其中find中第三個參數是上一步驟中調用map自身的find返回的迭代器變量
運行後列印的結果信息看,能夠正確調用algorithm中的find來查找map中的數據
四、總結
到這裡,我們已經將容器vector,map的查找功能介紹完成。接下來梳理總結。vector容器自身沒有提供查找函數,因此,需要調用algorithm中的find來快速查找數據。map容器自身既提供了查找函數,也支持使用algorithm中的find來快速查找數據。而自定義對象作為map容器的鍵的情況下,如果需要支持上面的場景,那麼自定義類需要重載operator<和operator==運算符。