一、vector 1.判斷某元素是否存在 vector<string> vStr; int nRet = std::count(vStr.begin(), vStr.end(), "xiaochun");//判斷vector中是否有 "xiaochun" 這個元素 2.查找某個元素 方法一: 自己寫循環遍歷 方法二: vector<string> vec; vector<string>::iterator iter; string gpcode="SZ000001"; iter = find(vec.begin(), vec.end(), gpcode); if(iter != vec.end()) { //vec中存在"SZ000001" } else { //沒找到 } 注意: 如果vector中保存的是自定義類型(結構體/類),則需要為該類型重載==操作符。再用find #include <stdio.h> #include <vector> #include <string> #include <algorithm> //是C++的標准模版庫(STL)中最重要的頭文件之一,提供了大量基於迭代器的非成員模板函數。 using namespace std; class DemoStruct { public: string gpcode; int ymd; vector<int> vec; DemoStruct() { ymd = 20170707; gpcode = ""; } bool operator == (const DemoStruct & obj) const //重載 “==” 操作符,函數最后的 const 別忘了,否則會報錯。(詳見:http://www.cnblogs.com/SZxiaochun/p/7731900.html) { return ymd == obj.ymd && gpcode == obj.gpcode; //具體匹配條件,可以自己設定 } }; int main() { vector<DemoStruct> vec_struct; DemoStruct demo; demo.gpcode = "SZ000001"; demo.ymd = 20170707; demo.vec.push_back(0); vec_struct.push_back(demo); DemoStruct tmpdemo; tmpdemo.gpcode = "SZ000001"; tmpdemo.ymd = 20170707; vector<DemoStruct>::iterator iter; iter = find(vec_struct.begin(), vec_struct.end(), tmpdemo); if (iter != vec_struct.end()) { printf("%s","find it"); } return 0; } 注意: 如果vector中保存的是自定義類型(結構體/類),且不方便重載==操作符,可以用 find_if struct StockInfo { short shtSetCode; string sCode; }; int main() { vector<StockInfo> vStock; StockInfo stockInfo1; stockInfo1.shtSetCode = 0; stockInfo1.sCode = "000002"; vStock.push_back(stockInfo1); StockInfo stockInfo2; stockInfo2.shtSetCode = 0; stockInfo2.sCode = "000003"; vStock.push_back(stockInfo2); StockInfo stockInfo3; stockInfo3.shtSetCode = 0; stockInfo3.sCode = "000004"; vStock.push_back(stockInfo3); //使用 find_if 自定義比較條件 if (find_if(vStock.begin(), vStock.end(), [&stockInfo1](StockInfo const & obj) {return obj.shtSetCode == stockInfo1.shtSetCode && obj.sCode == stockInfo1.sCode; }) != vStock.end()) //如果編譯報錯 “‘this’實參時丟棄了類型限定”,就把 & obj 前面的const去掉 { cout << "111" << endl; } return 0; } //這種場景,還可以使用set struct StockCmp //自定義 set 第二個參數 { bool operator()(const StockInfo &lStock, const StockInfo &rStock) const { if (lStock.iMarket < rStock.iMarket) { return true; } else if (lStock.iMarket == rStock.iMarket) { if (lStock.sCode < rStock.sCode) { return true; } } return false; } }; set<StockInfo, StockCmp> m_setTmp; StockInfo stStockInfo; stStockInfo.iMarket = 0; stStockInfo.sCode = "000001"; m_setTmp.insert(stStockInfo); stStockInfo.iMarket = 0; stStockInfo.sCode = "000002"; m_setTmp.insert(stStockInfo); if ( (auto iter = m_setTmp.find(stStockInfo)) != m_setTmp.end()) { //找到了 } 二、map 1.判斷某key是否存在 map<int, string> mapDemo; int nRet = mapDemo.count(100);//判斷mapDemo中是否有 key = 100 的元素 2.查找某個key map<int, string>::iterator iter = mapDemo.find(100); if (iter != m_Int.end()) { //找到了 } else { //沒找到 } 注意: 如果map中的 Key 是自定義類型(結構體/類),則需要自定義map第三個參數。再用find #include <stdio.h> #include <iostream> #include <map> #include <string> #include <algorithm> //是C++的標准模版庫(STL)中最重要的頭文件之一,提供了大量基於迭代器的非成員模板函數。 using namespace std; struct StockInfo // Key 是自定義類型 { int iMarket; string sCode; StockInfo(): iMarket(0) { } }; struct StockCmp //自定義 map 第三個參數 { bool operator()(const StockInfo &lStock, const StockInfo &rStock) const { if (lStock.iMarket < rStock.iMarket) { return true; } else if (lStock.iMarket == rStock.iMarket) { if (lStock.sCode < rStock.sCode) { return true; } } return false; } }; int main() { map<StockInfo, int, StockCmp> mapTestSort; StockInfo stockInfo3; stockInfo3.iMarket = 1; stockInfo3.sCode = "600000"; mapTestSort.insert(make_pair(stockInfo3,2)); StockInfo stockInfo2; stockInfo2.iMarket = 0; stockInfo2.sCode = "000002"; mapTestSort.insert(make_pair(stockInfo2,3)); StockInfo stockInfo1; stockInfo1.iMarket = 0; stockInfo1.sCode = "000001"; mapTestSort.insert(make_pair(stockInfo1,1)); cout << mapTestSort[stockInfo1] << endl; map<StockInfo, int, StockCmp>::iterator iter = mapTestSort.find(stockInfo1); if (iter != mapTestSort.end()) { cout << iter->second << endl; } return 0; }