【C++学习】C++ Map(容器)---map at() 函数使用方法及示例

1 篇文章 0 订阅

归属:C++ STL map(容器)

C ++ map at()函数用于通过给定的键值访问map中的元素。如果map中不存在所访问的键,则抛出out_of _range异常。

语法:假设键值为k,语法为:

mapped_type& at (const key_type& k);
const mapped_type& at (const key_type& k) const;

参数k:要访问其map值的元素的键值。

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

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

示例

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

int main ()
{
  map<string,int> m = {
                { "A", 10 },
                { "B", 20 },
                { "C", 30 } };

  for (auto& x: m) {
    cout << x.first << ": " << x.second << '\n';
  }
  return 0;
}
输出:

A: 10
B: 20	
C: 30

在上面,at()函数用于访问map的元素。

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

示例

#include <iostream>  
#include <string>  
#include <map>  
  
using namespace std;  

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

  mymap.at(101) = "nhooo"; 
  mymap.at(102) = ".";
  mymap.at(103) = "com";


//打印键101的值,即nhooo
  cout<<mymap.at(101); 
 // 打印键102的值,即.
  cout<<mymap.at(102);
 // 打印键103的值,即 com	
  cout<<mymap.at(103);

  return 0;
}

输出:

nhooo.com

在上面的示例中,使用at()函数在初始化后使用关联的键值添加元素。

实例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<<"元素是:" <<endl;
  for (auto& x: mymap) {
    	cout << x.first << ": " << x.second << '\n';
  }


  mymap.at(100) = "Nidhi"; // 将键100的值更改为Nidhi
  mymap.at(300) = "Pinku"; // 将键300的值更改为 Pinku
  mymap.at(500) = "Arohi"; // 将键500的值更改为 Arohi
  
  
  cout<<"\n更改后元素是:" <<endl;
  for (auto& x: mymap) {
    	cout << x.first << ": " << x.second << '\n';
  }
  
  return 0;
}
输出:

元素是:
100: Nikita
200: Deep
300: Priya
400: Suman
500: Aman

更改后元素是:
100: Nidhi
200: Deep
300: Pinku
400: Suman
500: Arohi

在上面的示例中,at()函数用于更改与其键值关联的值。

实例4:让我们看一个简单的示例来处理“超出范围”?例外。

示例

#include <iostream>  
#include <string>  
#include <map>  
  
using namespace std;  

int main ()
{
  map<char,string> mp= {
                { 'a',"Java"},
                { 'b', "C++"  },
                { 'c', "Python" }};
            
    cout<<endl<<mp.at('a');
    cout<<endl<<mp.at('b');
    cout<<endl<<mp.at('c');
    
    try {
        mp.at('z'); 
          // 因为map中没有值为z的键,所以它会抛出一个异常
        
    } catch(const out_of_range &e) {
        cout<<endl<<"Out of Range Exception at "<<e.what();
}

输出:

Java
C++
Python
Out of Range Exception at map::at
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C++中实现类似于hash_map容器,你可以使用标准库中的unordered_map容器。unordered_map是一个使用哈希表实现的关联容器,可以存储键值对。 为了在unordered_map使用自定义对象作为键,你需要提供哈希函数和相等比较函数。哈希函数用于将键映射到哈希值,相等比较函数用于判断两个键是否相等。 下面是一个示例,演示了如何在unordered_map使用自定义对象作为键: ```cpp #include <unordered_map> #include <iostream> #include <functional> class MyObject { public: int x; int y; // 其他成员变量和方法 // 重载相等比较运算符 bool operator==(const MyObject& other) const { return x == other.x && y == other.y; } }; // 哈希函数 namespace std { template <> struct hash<MyObject> { std::size_t operator()(const MyObject& obj) const { // 使用std::hash组合哈希值 return std::hash<int>()(obj.x) ^ std::hash<int>()(obj.y); } }; } int main() { std::unordered_map<MyObject, int> myMap; MyObject obj1 {1, 2}; MyObject obj2 {3, 4}; myMap[obj1] = 10; myMap[obj2] = 20; std::cout << myMap[obj1] << std::endl; // 输出 10 std::cout << myMap[obj2] << std::endl; // 输出 20 return 0; } ``` 在上面的示例中,我们定义了一个名为MyObject的自定义类。我们重载了相等比较运算符==,以便unordered_map能够正确比较两个MyObject对象是否相等。 为了使unordered_map能够正确地使用MyObject对象作为键,我们还定义了一个哈希函数。在这个示例中,我们使用std::hash<int>来哈希MyObject对象的成员变量x和y,并使用异或操作符^将它们的哈希值组合起来。 最后在main函数中,我们创建了一个unordered_map实例myMap,将MyObject对象作为键,并进行一些操作来验证容器的功能。 请注意,这只是一个示例,你可能需要根据你自己的需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值