无涯教程-C++ Map - operator[]函数

41 阅读3分钟

C ++映射 operator [] strong>函数用于通过给定的键值 strong>访问映射中的元素。

它类似于 at() strong>函数。它们之间的唯一区别是,如果映射中不存在所访问的密钥,则抛出异常;反之,如果密钥中不存在该密钥,则 operator [] strong>会将密钥插入映射中。地图。

句法

考虑键值 k strong>,语法为:

mapped_type& operator[] (const key_type& k);    //until C++ 11
mapped_type& operator[] (const key_type& k);   //since C++ 11
mapped_type& operator[] (key_type&& k); //since C++ 11

范围

k strong>:访问其映射值的元素的键值。

返回值

它使用键值返回对元素映射值的引用。

例子1

让我们看一个访问元素的简单示例。

#include <iostream>
#include <map>
using namespace std;
int main() 
{

map<char, int> m = { {a, 1}, {b, 2}, {c, 3}, {d, 4}, {e, 5}, };

cout << "Map contains following elements" << endl;

cout << "m[a] = " << m[a] << endl; cout << "m[b] = " << m[b] << endl; cout << "m[c] = " << m[c] << endl; cout << "m[d] = " << m[d] << endl; cout << "m[e] = " << m[e] << endl;

return 0; }

输出 strong>:

Map contains following elements
m[a] = 1
m[b] = 2
m[c] = 3
m[d] = 4
m[e] = 5

在上面,operator []函数用于访问map的元素。

例子2

让我们看一个简单的示例,使用它们的键值添加元素。

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main () { map<int,string> mymap = { { 101, "" }, { 102, "" }, { 103, ""} };

mymap[101] = "Java"; mymap[102] = "T"; mymap[103] = "Point";

	// prints value associated with key 101, i.e. Java

cout<<mymap[101]; // prints value associated with key 102, i.e T cout<<mymap[102]; // prints value associated with key 103, i.e Point cout<<mymap[103];

return 0; }

输出 strong>:

JavaTPoint 

在上面的示例中,operator []用于在初始化后使用关联的键值添加元素。

例子3

让我们看一个简单的示例,以更改与键值关联的值。

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main () { map<int,string> mymap = { { 100, "Nikita"}, { 200, "Deep" }, { 300, "Priya" }, { 400, "Suman" }, { 500, "Aman" }};

cout<<"Elements are:" <<endl; for (auto& x: mymap) { cout << x.first << ": " << x.second << ; }

mymap[100] = "Nidhi"; // changes the value associated with key 100 to Nidhi mymap[300] = "Pinku"; // changes the value associated with key 300 to Pinku mymap[500] = "Arohi"; // changes the value associated with key 500 to Arohi

cout<<"\nElements after make changes are:" <<endl; for (auto& x: mymap) { cout << x.first << ": " << x.second << ; }

return 0; }

输出 strong>:

Elements are:
100: Nikita
200: Deep
300: Priya
400: Suman
500: Aman

Elements after make changes are: 100: Nidhi 200: Deep 300: Pinku 400: Suman 500: Arohi

在上面的示例中,operator []函数用于更改与其键值关联的值。

例子4

让我们看一个简单的例子来区分operator []和at()。

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main () { map<char,string> mp = { { a,"Java"}, { b, "C++" }, { c, "Python" }};

cout&lt;&lt;endl&lt;&lt;mp[a];
cout&lt;&lt;endl&lt;&lt;mp[b];
cout&lt;&lt;endl&lt;&lt;mp[c];

 mp[d] = "SQL";   

/* since there is no key with value d in the map, it insert a key-value pair in map with key d and value = "SQL" */

 cout&lt;&lt;endl&lt;&lt;mp[d];
 
try {
    mp.at(z); 
      // since there is no key with value z in the map, it throws an exception 
     
    
} catch(const out_of_range &amp;e) {
    cout&lt;&lt;endl&lt;&lt;"\nOut of Range Exception at "&lt;&lt;e.what();
}

return 0; }

输出 strong>:

Java
C++
Python
SQL

Out of Range Exception at map::at

在上面的示例中,当我们使用at()函数时,由于在映射中不存在带有值z的键,并且当我们使用operator []并在键值d中添加元素时,由于没有键,它会引发out_of_range异常在地图中值为" d"时,它将在地图中插入具有键" d"和值为" SQL"的键-值对。




参考链接

www.learnfk.com/c++/cpp-map…