Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

map::operator[]

公众成员函数  <map>
C++98
mapped_type& operator[] (const key_type& k);

访问元素

如果 k 与容器中元素的键匹配,则函数返回对其映射值的引用。

如果k与容器中任何元素的键不匹配,则函数将插入一个具有该键的新元素,并返回对其映射值的引用。 注意,这样总是会使容器的大小增加1,即使没有给元素赋映射值(元素是使用默认构造函数构造的)。

类似的成员函数map::at,当具有键的元素存在时具有相同的行为,但当键不存在时抛出异常。
对这个函数的调用相当于: (*((this->insert(make_pair(k,mapped_type()))).first)).second

☲  参数


K
访问其映射值的元素的键值。
成员类型key_type是存储在容器中的元素的键类型,在map中定义为其第一个模板参数(Key)的别名。
如果是右值(第二个版本),则在插入新元素时移动键而不是复制键。

☉  返回值



对键值等于k的元素映射值的引用。
成员类型mapped_type是容器中映射值的类型,在map中定义为它的第二个模板参数(T)的别名。

☣  示例



// accessing mapped values
#include <iostream>
#include <map>
#include <string>

int main ()
{
  std::map<char,std::string> mymap;

  mymap['a']="an element";
  mymap['b']="another element";
  mymap['c']=mymap['b'];

  std::cout << "mymap['a'] is " << mymap['a'] << '\n';
  std::cout << "mymap['b'] is " << mymap['b'] << '\n';
  std::cout << "mymap['c'] is " << mymap['c'] << '\n';
  std::cout << "mymap['d'] is " << mymap['d'] << '\n';

  std::cout << "mymap now contains " << mymap.size() << " elements.\n";

  return 0;
}

注意最后一次访问(对元素'd'的访问)是如何在map中插入一个带有该键的新元素并初始化为其默认值(空字符串)的, 尽管访问该键只是为了检索其值。成员函数map::find不会产生这种效果。
输出:
mymap['a'] is an element
mymap['b'] is another element
mymap['c'] is another element
mymap['d'] is
mymap now contains 4 elements.

✥ 复杂度



容器大小:对数。

☣ 迭代器的有效性



不变

⇄ 数据竞争


容器被访问,并可能被修改。
该函数访问一个元素并返回一个引用,该引用可用于修改其映射值。并发访问其他元素是安全的。
如果函数插入一个新元素,则在容器中并发地迭代范围是不安全的。

☂ 异常安全性



强保证:如果抛出异常,容器中没有变化。
如果插入一个新元素,而allocator_traits::construct不能构造具有k和默认构造的mapped_type的元素 (或者如果mapped_type不是默认可构造的),则会导致未定义的行为。

🍄  另请参阅



map::find 获取元素迭代器(公众成员函数)
map::insert 插入元素(公众成员函数)
map::operator= 复制容器的内容(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图