对于std :: set和std :: map等数据类型,在对数时间内进行查找,是否需要实现维护开始和结束迭代器?访问开始和结束是否意味着可以在对数时间内进行查找?
我一直认为开始和结束总是在恒定的时间内发生,但我在Josuttis找不到任何确认。现在我正在做一些我需要对性能进行肛门的事情,我想确保覆盖我的基础。
由于
答案 0 :(得分:8)
他们在不断的时间发生。我正在查看ISO / IEC 14882:2003标准的第466页:
表65 - 容器需求
a.begin(); (常数复杂性)
a.end(); (常数复杂性)
表66 - 可逆容器要求
a.rbegin(); (常数复杂性)
a.rend(); (常数复杂性)
答案 1 :(得分:5)
是的,根据http://www.cplusplus.com/reference/stl/,begin(),end()等都是O(1)。
答案 2 :(得分:4)
在C ++标准中,23.1(容器需求)中的表65将begin()和end()列为需要恒定时间。如果您的实施违反了这一点,那就不符合要求。
答案 3 :(得分:2)
答案 4 :(得分:1)
但要小心hash_map。 begin()不是常数。
答案 5 :(得分:0)
对于std :: set
开始:常数,结束:常数, rbegin:常数, 撕裂:常数,
对于std :: map
它们也是不变的(所有这些)
如果您有任何疑问,请查看www.cplusplus.com