这些同样快吗? (地图和清单)

时间:2011-11-15 09:49:13

标签: c++ list vector

哪一个更快?片段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

5 个答案:

答案 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)中执行。 因此,在查找时,地图会更快。