C++ 具名要求:关联容器 (AssociativeContainer)

来自cppreference.com
< cpp‎ | named req
 
 
C++ 具名要求
基础
类型属性
库所属
容器
容器元素
(C++11)

迭代器
流 I/O
格式化
(C++20)
随机数
(C++11)    
并发
(C++11)
(C++11)
范围
其他
(C++11)


 

关联容器 (AssociativeContainer) 是提供基于键的快速对象查找的容器 (Container)

对于每个键都只能包含最多一个元素的关联容器支持唯一键,其他关联容器支持等价键

要求

满足以下条件的类型 X关联容器 (AssociativeContainer)

并且,给定

  • aX 类型的值
  • a2节点把柄X 兼容的 Y 类型的值
  • bXconst X 类型的值
  • a_uniq,支持唯一键的 X 类型的值
  • a_eq,支持等价键的 X 类型的值
  • a_tran,当类型 X::key_compare::is_transparent 存在时具有 Xconst X 类型的值
  • i and j,表示有效范围并指代可以隐式转换到 X::value_type 的元素的老式输入迭代器 (LegacyInputIterator)
  • p,到 a 的合法常迭代器
  • q,到 a 的合法可解引用常迭代器
  • r,到 a 的合法可解引用迭代器
  • q1q2,表示 a 中的有效范围的常迭代器
  • ilstd::initializer_list<X::value_type> 的对象
  • tX::value_type 类型的值
  • kX::key_type 类型的值
  • cX::key_compareconst X::key_compare 类型的值
  • kl,使得 ac(x, kl) 划分的值,其中 xa 中的元素 e 的键值
  • ku,使得 a!c(ku, x) 划分的值,其中 xa 中的元素 e 的键值
  • ke,使得 ac(x, ke)!c(ke, x) 划分的值,其中 c(x, ke) 意味着 !c(ke, x),并且 xa 中的元素 e 的键值
  • kx,满足以下条件的值
    • ac(x, kx)!c(kx, x) 划分,其中 c(x, kx) 意味着 !c(kx, x),并且 xa 中的元素 e 的键值
    • kx 不可转换到 X::iteratorX::const_iterator
  • AX 的分配器类型:在 X::allocator_type 存在时是该类型,否则是 std::allocator<X::value_type>
  • m,具有可转换到 A 的类型的分配器
  • nhX::node_type 类型的非 const 右值

类型

名称 类型 要求
key_type Key
mapped_type T(仅限 std::mapstd::multimap
value_type X可擦除 (Erasable)
key_compare Compare 可复制构造 (CopyConstructible)
value_compare 二元谓词 (BinaryPredicate)
node_type 使得公开嵌套类型与 X 中对应类型相同的节点把柄类模板特化

方法与运算符

表达式 返回类型 要求 效果 复杂度
X(c) c 的副本作为比较对象构造空容器 常数
X(), X a = X(); X::key_compare可默认构造 (DefaultConstructible) Compare() 作为比较对象构造空容器 常数
X(i, j, c) X::value_type*i可就位构造 (EmplaceConstructible) X c 的副本作为比较对象构造空容器,并且插入范围 [ij) 中的所有元素 通常是 N·log N,或者在 [ij) 已排序时是 N(其中 Nstd::distance(i, j)
X(i, j) X::key_compare可默认构造 (DefaultConstructible) ,并且 X::value_type*i可就位构造 (EmplaceConstructible) X Compare() 作为比较对象构造空容器,并且插入范围 [ij) 中的所有元素 通常是 N·log N,或者在 [ij) 已按 value_comp() 排序时是 N(其中 Nstd::distance(i, j)
X(il); 等价于 X(il.begin(),
  il.end());
等价于 X(il.begin(),

  il.end());

a = il X& T可复制插入 (CopyInsertable) X可复制赋值 (CopyAssignable) 将范围 [il.begin()il.end()) 赋给 aa 中没有被赋值的元素会被销毁 通常是 N·log N,或者在 [il.begin()il.end()) 已按 value_comp() 排序时是 N(其中 Nil.size() + a.size()
a.key_comp() X::key_compare 返回在构造 a 时提供的比较对象。 常数
a.value_comp() X::value_compare 返回通过比较对象构造出的 X::value_compare 类型对象。 常数

标准库中的关联容器

唯一键的集合,按照键排序
(类模板)
键的集合,按照键排序
(类模板)
键值对的集合,按照键排序,键是唯一的
(类模板)
键值对的集合,按照键排序
(类模板)

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 354 C++98 lower_boundupper_bound 在没找到元素时不会返回尾迭代器 此时它们会返回尾迭代器
LWG 589 C++98 ij 指代的元素具有 X::value_type 类型 那些元素可以隐式转换到 X::value_type