map 部分函数用法

本文介绍了C++11中map的三个关键操作:at()用于安全访问元素,当键不存在时抛出异常;emplace()在键不存在时直接构造并插入新元素;emplace_hint()则允许提供插入位置的提示,提高效率。示例代码展示了这些方法的使用及效果。
部署运行你感兴趣的模型镜像

1.at()

c++11
类似于 operator[ ]访问元素的操作,通过key找到和 key对应的value并将其返回。
当key不存在时,operator[ ]默认插入该<key,value>键值对,而at()会直接抛出异常。
使用eg:

int main ()
{
  std::map<std::string,int> mymap = {{ "alpha", 0 },{ "beta", 0 },{ "gamma", 0 } };
  mymap.at("alpha") = 10;
  mymap.at("beta") = 20;
  mymap.at("gamma") = 30;
  for (auto& x: mymap) 
    std::cout << x.first << ": " << x.second << '\n';
  return 0;
}
/*输出
alpha: 10
beta: 20
gamma: 30
*/

2.emplace()

c++11
用于通过在容器中插入新元素来扩展map容器。元素是直接构建的(既不复制也不移动)。通过给传递给该函数的参数args调用元素的构造函数。仅当键不存在时才进行插入

函数定义:
template <class...Args>
    pair<iterator, bool> emplace (Args&&... args);    //从 C++ 11 开始

参数args:转发以构造要插入到map中的元素的参数。
返回值:返回一个布尔对,它表示是否发生插入,并返回一个指向新插入元素的迭代器。

int main(void) { 
   map<char, int> m;
   m.emplace('a', 1);
   m.emplace('b', 2);
   m.emplace('c', 3);
   m.emplace('d', 4);
   m.emplace('e', 5);
   cout << "Map包含以下元素" << endl;
   for (auto it = m.begin(); it != m.end(); ++it)
      cout << it->first << " = " << it->second << endl;
   return 0;
}
/*输出:
Map包含以下元素
a = 1
b = 2
c = 3
d = 4
e = 5
*/

3.emplace_hint()

c++11
功能:通过使用提示作为元素位置将新元素插入到容器中来扩展map容器。元素是直接构建的(既不复制也不移动)。通过给传递给该函数的参数args调用元素的构造函数。仅当密钥不存在时才进行插入。

函数定义:
template <class... Args>
    iterator emplace_hint (const_iterator position, Args&&...args);

参数:
args:转发以构造要插入到映射中的元素的参数。
position:提示插入新元素的位置。(迭代器)
返回值:
它将迭代器返回到新插入的元素。如果元素已经存在,则插入失败,并将迭代器返回到现有元素。
eg:

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

template <typename M> void print(const M& m) {
    cout << m.size() << " elements: " << endl;
    for (const auto& p : m) {
        cout << "(" << p.first << "," << p.second << ") ";
    }
    cout << endl;
}

int main()
{
    map<string, string> m1;

    m1.emplace("Ram", "Accounting");
    m1.emplace("Rakesh", "Accounting");
    m1.emplace("Sunil", "Engineering");
    cout << "map starting data: ";
    print(m1);
    cout << endl;
    m1.emplace_hint(m1.end(), "Deep", "Engineering");
    cout << "map已修改,现在包含 ";
    print(m1);
    cout << endl;
}
/*输出:
map starting data: 3 elements:
(Rakesh,Accounting) (Ram,Accounting) (Sunil,Engineering)

map已修改,现在包含 4 elements:
(Deep,Engineering) (Rakesh,Accounting) (Ram,Accounting) (Sunil,Engineering)
*/

4.max_size()

size()函数返回的是map中的元素数。
max_size()返回的是map的最大容量。
eg:

int main()
{
    map<char,char> s;
    cout << "map的最大大小是 " << s.max_size() << "\n";
}
/*输出:
map的最大大小是 268435455
*/

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

### 关于 `map` 函数的使用方法 在 Python 中,`map` 是一个内置函数,用于对序列中的每个元素应用指定的函数,并返回一个新的迭代器。以下是对其用法和示例的详细说明。 #### 概念 `map` 函数的核心思想是映射(mapping),即将输入序列中的每个元素通过某个函数进行转换[^1]。它的主要功能是对一组数据执行某种操作,并生成新的结果集。 #### 语法 `map` 函数的基本语法如下: ```python map(function, iterable) ``` - `function`: 要应用的函数。 - `iterable`: 一个或多个可迭代对象(如列表、元组等)。 如果需要对多个序列进行操作,可以传递多个可迭代对象给 `map` 函数。例如: ```python result = map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6]) print(list(result)) # 输出:[5, 7, 9] ``` #### 示例 以下是一些常见的 `map` 函数使用示例: 1. **计算平方值**: 使用普通函数或 lambda 表达式计算列表中每个元素的平方值。 ```python def square(x): return x ** 2 numbers = [1, 2, 3, 4, 5] squares = map(square, numbers) print(list(squares)) # 输出:[1, 4, 9, 16, 25] ``` 如果使用 lambda 表达式,则代码可以更简洁: ```python squares = map(lambda x: x ** 2, numbers) print(list(squares)) # 输出:[1, 4, 9, 16, 25] ``` 2. **字符串转换为大写**: 将列表中的字符串转换为大写形式。 ```python strings = ['hello', 'world'] upper_strings = map(str.upper, strings) print(list(upper_strings)) # 输出:['HELLO', 'WORLD'] ``` 3. **多参数操作**: 对两个列表中的元素进行加法运算。 ```python list1 = [1, 2, 3] list2 = [4, 5, 6] result = map(lambda x, y: x + y, list1, list2) print(list(result)) # 输出:[5, 7, 9] ``` #### 注意事项 - `map` 返回的是一个迭代器对象,若需要以列表形式查看结果,需使用 `list()` 转换[^1]。 - 如果传入的多个序列长度不同,`map` 会以最短的序列长度为准进行操作[^2]。 #### C++ 中的 `map` 在 C++ 中,`map` 是一种关联容器,用于存储键值对(key-value pairs)。它内部实现为红黑树,能够自动对键进行排序[^3]。以下是其基本用法: ```cpp #include <iostream> #include <map> using namespace std; int main() { map<int, string> student_map; student_map[1] = "Alice"; student_map[2] = "Bob"; for (auto &pair : student_map) { cout << pair.first << ": " << pair.second << endl; } // 查找键是否存在 if (student_map.find(1) != student_map.end()) { cout << "Key 1 exists." << endl; } return 0; } ``` #### 总结 `map` 函数在 Python 和 C++ 中有着不同的用途。Python 中的 `map` 主要用于对序列中的每个元素应用函数并生成新的结果,而 C++ 中的 `map` 则是一个键值对容器,用于存储和查找数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值