字符串的映射,设置。值
比较我有一个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;
使用map::iterator
和地图的find()
功能。一旦该值在地图上找到,set
搜索:
bool found = false;
TFlights::iterator it = flights.find("Madison");
if (it != flights.end())
{
// key exists in map. Now search the set
if (it->second.find("Boston") != it->second.end())
found = true;
}
return found;
与 iter-> second.find("Boston") != iter-> second.end()
map<string, set<string>>::iterator i;
bool found = (i = flights.find("Madison")) != flights.end()) && i->count("Boston");
纯代码的答案,即使没有细小的单行解释,也几乎总是落在VLQ队列中,并最终被删除。有近5万名代表的用户应该知道这一点。 – trejder 2014-12-08 07:03:37
@trejder:哦,真是一种解脱!......在那一刻,我想我注定要让所有永恒的读者脆弱的心灵负担过重...... ;-) – 2014-12-08 10:09:53
所以你行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