在无序映射上使用find()<string,vector <string>&gt;与C ++中的有序映射相同

时间:2016-11-28 09:59:56

标签: c++ optimization unordered-map

我有一个无序的字符串和字符串向量的地图,即un_map<string,vector<string> >。 使用find函数搜索特定字符串时:

find((un_map[A].begin(),un_map[A].end(),field)==un_map[A].end())

无序地图和有序地图执行查找功能的时间相同。谁能解释为什么这样?到目前为止,我知道由于散列,无序地图应该比有序地图快得多。我想优化查找功能。请帮忙

1 个答案:

答案 0 :(得分:5)

std::find正在使用标准迭代搜索所有容器,仅使用迭代器的增量。所以,这里的复杂性是O(n)。

要加速查找元素,基于容器,您需要调用容器的find方法。

std::unordered_map::find搜索O(1)的复杂性,因为正如您所指出的那样,它使用散列。

std::map::find搜索复杂度为O(log(n)),因为它使用二进制搜索。