比較我有一個map<string, set<string>>
,我有一個條目,這是flights["Madison"].insert("Boston");
字符串的映射,設置。值
現在我想知道我怎麼能檢查是否有在地圖上是"Madison", "Boston"
的條目。我想不出找到這個集合中的鍵值是否存在的方法。
這是我迄今爲止的嘗試:我感覺好像我是一兩條線。
typedef map<string, set<string>> TFlights;
TFlights flights;
TFlights::iterator iter, iter2;
bool found = false;
flights["Madison"].insert("Boston");
flights["Madison"].insert("Miami");
for(iter = flights.begin(); iter != flights.end(); iter++)
{
if(iter->first == "Madison" && //iter->second contains "Boston")
{
found = true;
}
}
return found;
所以你行iter-> second.find( 「波士頓」)= ITER替換您的評論 - > second.end()正在通過設置,看看「波士頓」的價值或我正在尋找的東西是否在設置中? – Adam 2014-12-08 06:13:50
是的。這就是你在一組中搜索的方式。使用'find'方法。地圖和集合都有對數搜索時間(即,如果您有1000個項目要搜索,則只需要10次比較)。然而,如果你爲搜索編寫一個for循環(就像你原來的文章所做的那樣),你將擊敗這個優化的目的。 – PaulMcKenzie 2014-12-08 06:14:32
謝謝。我讚賞描述和例子。這是我進入C++ STL的第一步。它工作完美。我採用了你建議的對數方法,並將我的代碼改爲無循環。 [除了find()] – Adam 2014-12-08 06:17:09