类别:容器 | 组件类型:概念 |
排序关联容器保证大多数操作的复杂度永远不会比对数更差[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. | 如果t1和t2是类型为value_type的对象,并且k1和k2是与其关联的键,则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). |
删除元素是常数时间。
删除键是O(log(size()) + count(k)). [1]
删除范围是O(log(size()) + N),其中N是范围的长度。[1]
查找是对数的。[1]
计数是O(log(size()) + count(k)). [1]
下界、上界和相等范围是对数的。[1]
的定义value_comp | 如果t1和t2是类型为X::value_type和k1和k2是与这些对象关联的键,则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)返回一个空范围,指示如果这些元素存在则它们将位于的位置。关联容器需求仅声明返回值是任意空范围。