哪一个更快?片段A还是片段B?或者他们会或多或少相同?
我知道他们是不切实际的计划;这仅用于学习目的。
list<string> A(1000);
//assign random string values to each entry in A (code not shown).
//At least one of the strings is "test"
list<string>::iterator it;
//BEGINNING OF FRAGMENT A:
for(it=A.begin(); it!=A.end(); it++){
if((*it)=="test"){
cout << "found";
break;
}
}
//END OF FRAGMENT A
map<string,bool> B(1000);
//assign random string values to each entry in B (code not shown).
//At least one of the strings is "test".
//B[any string]=1 (code not shown)
//
//BEGINNING OF FRAGMENT B:
if(B["test"]) cout << "found";
////END OF FRAGMENT B
答案 0 :(得分:4)
首先你应该分析的所有内容。
第二
它们不相等,因为B["test"]
将插入一个元素,如果它不在容器中。
if(B.count("test") != 0)
是正确的做法。
第三; B更快,并且将获得更大的容器,因为它将在已排序的容器中执行二进制搜索; O(log(N))而不是 O(N)。
Forth; std :: hash_set或hash_map可能就是你要找的东西,因为它比std :: map
更快答案 1 :(得分:1)
B的速度要快得多。在A中,您必须遍历整个列表,即O(n)
操作。
地图通常以树形式实现,时间为O(log(n))
。
答案 2 :(得分:1)
通过关键信息更快地找到地图。
答案 3 :(得分:1)
搜索链接的list
具有线性复杂度O(n),而通过map
搜索将具有对数复杂度O(log n)。
或者,您可以使用set
类型。
答案 4 :(得分:1)
列表搜索具有O(n)的最坏情况复杂度,其中map将在O(log n)中执行。 因此,在查找时,地图会更快。