SGI

排序关联容器

类别:容器 组件类型:概念

描述

排序关联容器是一种关联容器。排序关联容器在其键上使用排序关系;如果两个键都不小于另一个,则认为它们是等价的。(例如,如果排序关系是不区分大小写的字符串比较,则键“abcde”和“aBcDe”是等价的。)

排序关联容器保证大多数操作的复杂度永远不会比对数更差[1],并且它们还保证其元素始终按键升序排序。

细化自

可逆容器关联容器

关联类型

除了在关联容器可逆容器需求中定义的类型外,还引入了两种新类型。
X::key_compare 用于比较键的严格弱排序的类型。其参数类型必须是X::key_type.
X::value_compare 用于比较值的严格弱排序的类型。其参数类型必须是X::value_type,并且它通过将与这些对象关联的键传递给类型为value_type的两个对象的比较key_compare.

符号

X 排序关联容器模型的类型
a 类型为X
t 类型为X::value_type
k 类型为X::key_type
p, q 类型为X::iterator
c 类型为X::key_compare

定义

有效表达式

除了在关联容器可逆容器中定义的表达式外,以下表达式必须有效。
名称 表达式 类型要求 返回类型
默认构造函数
X()
X a;
   
带比较器的构造函数
X(c)
X a(c);
   
键比较 a.key_comp()   X::key_compare
值比较 a::value_compare()   X::value_compare
下界 a.lower_bound(k)   迭代器如果a是可变的,否则const_iterator.
上界 a.upper_bound(k)   迭代器如果a是可变的,否则const_iterator.
相等范围 a.equal_range(k)   pair<iterator, iterator>如果a是可变的,否则pair<const_iterator, const_iterator>.

表达式语义

名称 表达式 前提条件 语义 后置条件
默认构造函数
X()
X a;
  创建一个空容器,使用key_compare()作为比较对象。 容器的大小为0.
带比较器的构造函数
X(c)
X a(c);
  创建一个空容器,使用c作为比较对象。 容器的大小为0. key_comp()返回一个与c.
键比较 a.key_comp()   返回由a.  
值比较 a::value_compare()   返回由a. 如果t1t2是类型为value_type的对象,并且k1k2是与其关联的键,则a.value_comp()(t1, t2)等价于a.key_comp()(k1, k2).
下界 a.lower_bound(k)   返回一个指向键不小于k的第一个元素的迭代器。如果不存在这样的元素,则返回a.end() 如果a包含任何与k具有相同键的元素,则lower_bound的返回值指向第一个这样的元素。
上界 a.upper_bound(k)   返回一个指向键大于k的第一个元素的迭代器。如果不存在这样的元素,则返回a.end() 如果a包含任何与k具有相同键的元素,则upper_bound的第一个元素的迭代器,指向最后一个这样的元素的下一个位置。
相等范围 a.equal_range(k)   返回一个对,其第一个元素是a.lower_bound(k),其第二个元素是a.upper_bound(k).  

复杂度保证

key_comp()value_comp()是常数时间。

删除元素是常数时间。

删除键是O(log(size()) + count(k)). [1]

删除范围是O(log(size()) + N),其中N是范围的长度。[1]

查找是对数的。[1]

计数是O(log(size()) + count(k)). [1]

下界、上界和相等范围是对数的。[1]

不变量

的定义value_comp 如果t1t2是类型为X::value_typek1k2是与这些对象关联的键,则a.value_comp()返回一个函数对象,使得a.value_comp()(t1, t2)等价于a.key_comp()(k1, k2).
升序 排序关联容器中的元素始终按键升序排列。也就是说,如果a是排序关联容器,则is_sorted(a.begin(), a.end(), a.value_comp())始终为true.

模型

注释

[1] 这是比关联容器提供的保证强得多的保证。关联容器中的保证仅适用于平均复杂度;允许最坏情况复杂度更大。但是,排序关联容器提供了对最坏情况复杂度的上限。

[2] 此定义与关联容器中描述的语义一致。不过,它是一个更强的条件:如果a不包含任何具有键k的元素,则a.equal_range(k)返回一个空范围,指示如果这些元素存在则它们将位于的位置。关联容器需求仅声明返回值是任意空范围。

另请参阅

关联容器哈希关联容器
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息