SGI

唯一已排序关联容器

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

说明

唯一已排序关联容器是一款 已排序关联容器,同时也是一款 唯一关联容器。换句话说,它是一款具有以下特性的 已排序关联容器:容器中的元素没有两个的键相同。

细化

已排序关联容器唯一关联容器

关联类型

无,除了那些在 已排序关联容器唯一关联容器 需求中描述的类型。

符号

X 唯一已排序关联容器类型的模型
a 类型对象X
t 类型对象X::value_type
k 类型对象X::key_type
p, q 类型对象X::iterator
c 类型对象X::key_compare

定义

有效表达式

除了 已排序关联容器唯一关联容器 中定义的表达式以外,以下表达式必须有效。
名称 表达式 类型需求 返回类型
范围构造函数
X(i, j)
X a(i, j);
ij是其值类型可转换为T [1].  
具有比较的范围构造函数
 
X(i, j, c)
X a(i, j, c);
ij是其值类型可转换为T [1]. c是类型对象key_compare.  
提示插入 a.insert(p, t)   迭代器
插入范围 a.insert(i, j) ij是其值类型可转换为X::value_type. [1] void

表达式语义

名称 表达式 前置条件 语义 后置条件
范围构造函数
X(i, j)
X a(i, j);
[i,j)是有效范围。 创建含有范围中的所有元素且这些元素拥有唯一键的关联容器。[i,j)容器使用的比较对象为key_compare(). size()小于等于从ij.
具有比较的范围构造函数
 
X(i, j, c)
X a(i, j, c);
[i,j)是有效范围。 创建含有范围中的所有元素且这些元素拥有唯一键的关联容器。[i,j)容器使用的比较对象为c. size()小于等于从ij.
提示插入 a.insert(p, t) pa. 中是一个非奇异迭代器。t插入a仅当且仅当a不包含其键等同于t的键的元素时。p参数t. a是一个提示:它指向搜索开始的位置。返回值是一个可取消引用的迭代器,它指向的元素具有与t包含一个其键与a的键相同的元素时。1的大小将递增0.
插入范围 a.insert(i, j) 是有效范围。 [i, j)等同于a.insert(t)t针对由范围中的迭代器指向的每个对象。每个元素都被插入到a仅当且仅当a不包含具有等效键的元素。 的大小a最多增加j - i.

复杂性保证

范围构造函数和带有比较函数的范围构造函数通常为O(N * log(N)),其中N是范围的大小。但是,如果范围按Nvalue_comp()排序,则范围呈线性增长。.

带有提示的插入操作通常呈对数增长,但在t之前立即插入后变为平均恒定时间。p.

插入范围通常为O(N * log(N)),其中N是范围的大小。但是,如果范围按Nvalue_comp()排序,则范围呈线性增长。.

不变条件

严格的升序 唯一的已排序关联容器中的元素始终按键严格按照升序排列。即,如果a是唯一的已排序关联容器,则is_sorted(a.begin(), a.end(), a.value_comp())始终为true。此外,如果ija中的可解引用迭代器,使得ij之前,则a.value_comp()(*i, *j)始终为true. [2]

模型

注释

[1] 目前(1998年初),并非所有编译器都支持“成员模板”。如果您的编译器支持成员模板,则ij可以为符合输入迭代器要求的任何类型。但是,如果您的编译器尚不支持成员模板,则ij必须为以下类型const T*或以下类型X::const_iterator.

[2] 这是一个比已排序关联容器更严格的不变条件。在已排序关联容器中,我们仅知道每个元素小于或等于其后继元素;但在唯一的已排序关联容器中,我们知道元素必须小于其后继元素。

另请参阅

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